- Apache Pig 教程
- Apache Pig - 首頁
- Apache Pig 簡介
- Apache Pig - 概述
- Apache Pig - 架構
- Apache Pig 環境
- Apache Pig - 安裝
- Apache Pig - 執行
- Apache Pig - Grunt Shell
- Pig Latin
- Pig Latin - 基礎
- 載入與儲存運算子
- Apache Pig - 讀取資料
- Apache Pig - 儲存資料
- 診斷運算子
- Apache Pig - 診斷運算子
- Apache Pig - Describe 運算子
- Apache Pig - Explain 運算子
- Apache Pig - Illustrate 運算子
- Pig Latin 內建函式
- Apache Pig - Eval 函式
- 載入與儲存函式
- Apache Pig - Bag 與 Tuple 函式
- Apache Pig - 字串函式
- Apache Pig - 日期時間函式
- Apache Pig - 數學函式
- Apache Pig 有用資源
- Apache Pig - 快速指南
- Apache Pig - 有用資源
- Apache Pig - 討論
Apache Pig - 讀取資料
一般來說,Apache Pig 執行在 Hadoop 之上。它是一個分析工具,用於分析存在於Hadoop File System 中的大型資料集。要使用 Apache Pig 分析資料,我們必須首先將資料載入到 Apache Pig 中。本章解釋如何從 HDFS 將資料載入到 Apache Pig。
準備 HDFS
在 MapReduce 模式下,Pig 從 HDFS 讀取(載入)資料並將結果儲存回 HDFS。因此,讓我們啟動 HDFS 並在 HDFS 中建立以下示例資料。
| 學生 ID | 名 | 姓 | 電話 | 城市 |
|---|---|---|---|---|
| 001 | Rajiv | Reddy | 9848022337 | Hyderabad |
| 002 | siddarth | Battacharya | 9848022338 | Kolkata |
| 003 | Rajesh | Khanna | 9848022339 | Delhi |
| 004 | Preethi | Agarwal | 9848022330 | Pune |
| 005 | Trupthi | Mohanthy | 9848022336 | Bhuwaneshwar |
| 006 | Archana | Mishra | 9848022335 | Chennai |
以上資料集包含六名學生的個人詳細資訊,例如 ID、名、姓、電話號碼和城市。
步驟 1:驗證 Hadoop
首先,使用 Hadoop 版本命令驗證安裝,如下所示。
$ hadoop version
如果您的系統包含 Hadoop,並且您已設定 PATH 變數,則您將獲得以下輸出:
Hadoop 2.6.0 Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r e3496499ecb8d220fba99dc5ed4c99c8f9e33bb1 Compiled by jenkins on 2014-11-13T21:10Z Compiled with protoc 2.5.0 From source with checksum 18e43357c8f927c0695f1e9522859d6a This command was run using /home/Hadoop/hadoop/share/hadoop/common/hadoop common-2.6.0.jar
步驟 2:啟動 HDFS
瀏覽 Hadoop 的sbin目錄並啟動yarn和 Hadoop dfs(分散式檔案系統),如下所示。
cd /$Hadoop_Home/sbin/ $ start-dfs.sh localhost: starting namenode, logging to /home/Hadoop/hadoop/logs/hadoopHadoop-namenode-localhost.localdomain.out localhost: starting datanode, logging to /home/Hadoop/hadoop/logs/hadoopHadoop-datanode-localhost.localdomain.out Starting secondary namenodes [0.0.0.0] starting secondarynamenode, logging to /home/Hadoop/hadoop/logs/hadoop-Hadoopsecondarynamenode-localhost.localdomain.out $ start-yarn.sh starting yarn daemons starting resourcemanager, logging to /home/Hadoop/hadoop/logs/yarn-Hadoopresourcemanager-localhost.localdomain.out localhost: starting nodemanager, logging to /home/Hadoop/hadoop/logs/yarnHadoop-nodemanager-localhost.localdomain.out
步驟 3:在 HDFS 中建立目錄
在 Hadoop DFS 中,您可以使用命令mkdir建立目錄。在 HDFS 中使用所需的路徑建立一個名為Pig_Data的新目錄,如下所示。
$cd /$Hadoop_Home/bin/ $ hdfs dfs -mkdir hdfs://:9000/Pig_Data
步驟 4:將資料放入 HDFS
Pig 的輸入檔案包含每行一個元組/記錄。記錄的實體由分隔符分隔(在我們的示例中,我們使用“,”)。
在本地檔案系統中,建立一個名為student_data.txt的輸入檔案,其中包含如下所示的資料。
001,Rajiv,Reddy,9848022337,Hyderabad 002,siddarth,Battacharya,9848022338,Kolkata 003,Rajesh,Khanna,9848022339,Delhi 004,Preethi,Agarwal,9848022330,Pune 005,Trupthi,Mohanthy,9848022336,Bhuwaneshwar 006,Archana,Mishra,9848022335,Chennai.
現在,使用put命令將檔案從本地檔案系統移動到 HDFS,如下所示。(您也可以使用copyFromLocal命令。)
$ cd $HADOOP_HOME/bin $ hdfs dfs -put /home/Hadoop/Pig/Pig_Data/student_data.txt dfs://:9000/pig_data/
驗證檔案
您可以使用cat命令驗證檔案是否已移動到 HDFS,如下所示。
$ cd $HADOOP_HOME/bin $ hdfs dfs -cat hdfs://:9000/pig_data/student_data.txt
輸出
您可以看到檔案的內容,如下所示。
15/10/01 12:16:55 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 001,Rajiv,Reddy,9848022337,Hyderabad 002,siddarth,Battacharya,9848022338,Kolkata 003,Rajesh,Khanna,9848022339,Delhi 004,Preethi,Agarwal,9848022330,Pune 005,Trupthi,Mohanthy,9848022336,Bhuwaneshwar 006,Archana,Mishra,9848022335,Chennai
Load 運算子
您可以使用Pig Latin的LOAD運算子從檔案系統(HDFS/本地)將資料載入到 Apache Pig。
語法
load 語句由“=”運算子分隔的兩部分組成。在左側,我們需要提及我們想要儲存資料的關係名稱,在右側,我們必須定義我們如何儲存資料。以下是Load運算子的語法。
Relation_name = LOAD 'Input file path' USING function as schema;
其中,
relation_name − 我們必須提及我們想要儲存資料的關聯。
輸入檔案路徑 − 我們必須提及儲存檔案的 HDFS 目錄。(在 MapReduce 模式下)
function − 我們必須從 Apache Pig 提供的載入函式集(BinStorage, JsonLoader, PigStorage, TextLoader)中選擇一個函式。
Schema − 我們必須定義資料的模式。我們可以按如下方式定義所需的模式:
(column1 : data type, column2 : data type, column3 : data type);
注意 − 我們在不指定模式的情況下載入資料。在這種情況下,列將分別稱為 $01、$02 等……(檢查)。
示例
例如,讓我們使用LOAD命令將student_data.txt中的資料載入到 Pig 中名為Student的模式下。
啟動 Pig Grunt Shell
首先,開啟 Linux 終端。在 MapReduce 模式下啟動 Pig Grunt shell,如下所示。
$ Pig –x mapreduce
它將啟動 Pig Grunt shell,如下所示。
15/10/01 12:33:37 INFO pig.ExecTypeProvider: Trying ExecType : LOCAL 15/10/01 12:33:37 INFO pig.ExecTypeProvider: Trying ExecType : MAPREDUCE 15/10/01 12:33:37 INFO pig.ExecTypeProvider: Picked MAPREDUCE as the ExecType 2015-10-01 12:33:38,080 [main] INFO org.apache.pig.Main - Apache Pig version 0.15.0 (r1682971) compiled Jun 01 2015, 11:44:35 2015-10-01 12:33:38,080 [main] INFO org.apache.pig.Main - Logging error messages to: /home/Hadoop/pig_1443683018078.log 2015-10-01 12:33:38,242 [main] INFO org.apache.pig.impl.util.Utils - Default bootup file /home/Hadoop/.pigbootup not found 2015-10-01 12:33:39,630 [main] INFO org.apache.pig.backend.hadoop.executionengine.HExecutionEngine - Connecting to hadoop file system at: hdfs://:9000 grunt>
執行 Load 語句
現在,透過在 Grunt shell 中執行以下 Pig Latin 語句,將資料從student_data.txt檔案載入到 Pig 中。
grunt> student = LOAD 'hdfs://:9000/pig_data/student_data.txt'
USING PigStorage(',')
as ( id:int, firstname:chararray, lastname:chararray, phone:chararray,
city:chararray );
以下是上述語句的描述。
| 關係名稱 | 我們將資料儲存在student模式中。 | ||||||||||||
| 輸入檔案路徑 | 我們正在讀取位於 HDFS 的 /pig_data/ 目錄中的student_data.txt檔案中的資料。 | ||||||||||||
| 儲存函式 | 我們使用了PigStorage()函式。它將資料載入並存儲為結構化文字檔案。它將每個元組的實體分隔的定界符作為引數。預設情況下,它將“\t”作為引數。 | ||||||||||||
| 模式 | 我們使用以下模式儲存資料。
|
注意 − load語句只會將資料載入到 Pig 中指定的關聯中。要驗證Load語句的執行,您必須使用診斷運算子,這將在接下來的章節中討論。