Apache Pig 加載數(shù)據(jù)

2018-01-02 22:08 更新

一般來說,Apache Pig在Hadoop之上工作。它是一種分析工具,用于分析 Hadoop File System中存在的大型數(shù)據(jù)集。要使用Apache Pig分析數(shù)據(jù),我們必須首先將數(shù)據(jù)加載到Apache Pig中。本章介紹如何從HDFS將數(shù)據(jù)加載到Apache Pig。

準備HDFS

在MapReduce模式下,Pig從HDFS讀?。虞d)數(shù)據(jù)并將結(jié)果存回HDFS。因此,讓我們先從HDFS開始,在HDFS中創(chuàng)建以下示例數(shù)據(jù)。

學生ID名字姓氏電話號碼城市
001RajivReddy9848022337Hyderabad
002siddarthBattacharya9848022338Kolkata
003RajeshKhanna9848022339Delhi
004PreethiAgarwal9848022330Pune
005TrupthiMohanthy9848022336Bhuwaneshwar
006ArchanaMishra9848022335Chennai

上述數(shù)據(jù)集包含六個學生的個人詳細信息,如id,名字,姓氏,電話號碼和城市。

步驟1:驗證Hadoop

首先,使用Hadoop version命令驗證安裝,如下所示。

$ hadoop version

如果你的系統(tǒng)里有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(分布式文件系統(tǒng)),如下所示。

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中創(chuàng)建目錄

在Hadoop DFS中,可以使用 mkdir 命令創(chuàng)建目錄。在HDFS所需路徑中創(chuàng)建一個名為 Pig_Data 的新目錄,如下所示。

$cd /$Hadoop_Home/bin/ 
$ hdfs dfs -mkdir hdfs://localhost:9000/Pig_Data 

步驟4:將數(shù)據(jù)放在HDFS中

Pig的輸入文件包含單個行中的每個元組/記錄。記錄的實體由分隔符分隔(在我們的示例中,我們使用“,”)。在本地文件系統(tǒng)中,創(chuàng)建一個包含數(shù)據(jù)的輸入文件 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.

現(xiàn)在,使用 put 命令將文件從本地文件系統(tǒng)移動到HDFS,如下所示。(你也可以使用 copyFromLocal 命令。)

$ cd $HADOOP_HOME/bin 
$ hdfs dfs -put /home/Hadoop/Pig/Pig_Data/student_data.txt dfs://localhost:9000/pig_data/

驗證文件

使用 cat 命令驗證文件是否已移入HDFS,如下所示。

$ cd $HADOOP_HOME/bin
$ hdfs dfs -cat hdfs://localhost:9000/pig_data/student_data.txt

輸出

現(xiàn)在,可以看到文件的內(nèi)容,如下所示。

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 運算符,從文件系統(tǒng)(HDFS / Local)將數(shù)據(jù)加載到Apache Pig中。

語法

load語句由兩部分組成,用“=”運算符分隔。在左側(cè),需要提到我們想要存儲數(shù)據(jù)的關系的名稱;而在右側(cè),我們需要定義如何存儲數(shù)據(jù)。下面給出了 Load 運算符的語法。

Relation_name = LOAD 'Input file path' USING function as schema;

說明:

  • relation_name - 我們必須提到要存儲數(shù)據(jù)的關系。

  • Input file path - 我們必須提到存儲文件的HDFS目錄。(在MapReduce模式下)

  • function - 我們必須從Apache Pig提供的一組加載函數(shù)中選擇一個函數(shù) BinStorage,JsonLoader,PigStorage,TextLoader 

  • Schema - 我們必須定義數(shù)據(jù)的模式,可以定義所需的模式如下 -

(column1 : data type, column2 : data type, column3 : data type);

注意:我們加載數(shù)據(jù)而不指定模式。在這種情況下,列將被尋址為$01,$02,等...(檢查)。

例如,我們使用 LOAD 命令,在名為學生的模式下在Pig中的 student_data.txt 加載數(shù)據(jù)。

啟動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://localhost:9000
 
grunt>

執(zhí)行Load語句

現(xiàn)在,通過在Grunt shell中執(zhí)行以下Pig Latin語句,將文件 student_data.txt 中的數(shù)據(jù)加載到Pig中。

grunt> student = LOAD 'hdfs://localhost:9000/pig_data/student_data.txt' 
   USING PigStorage(',')
   as ( id:int, firstname:chararray, lastname:chararray, phone:chararray, 
   city:chararray );

以下是對上述說明的描述。

Relation name我們已將數(shù)據(jù)存儲在學生(student)模式中。
Input file path我們從HDFS的/pig_data/目錄中的 student_data.txt 文件讀取數(shù)據(jù)。
Storage function我們使用了 PigStorage() 函數(shù),將數(shù)據(jù)加載并存儲為結(jié)構(gòu)化文本文件。它采用分隔符,使用元組的每個實體作為參數(shù)分隔。默認情況下,它以“\t"作為參數(shù)。
schema

我們已經(jīng)使用以下模式存儲了數(shù)據(jù)。

columnid名字姓氏電話號碼城市
datatypeintchar arraychar arraychar arraychar array

注意: Load語句會簡單地將數(shù)據(jù)加載到Pig的指定的關系中。要驗證Load語句的執(zhí)行情況,必須使用Diagnostic運算符,這將在后續(xù)的章節(jié)中討論。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號