📅  最后修改于: 2020-12-02 05:32:30             🧑  作者: Mango
通常,Apache Pig在Hadoop之上工作。它是一种分析工具,用于分析存在在H adoop˚FILE变体系大型数据集。要使用Apache Pig分析数据,我们必须首先将数据加载到Apache Pig中。本章说明如何从HDFS将数据加载到Apache Pig。
在MapReduce模式下,Pig从HDFS读取(加载)数据并将结果存储回HDFS。因此,让我们启动HDFS并在HDFS中创建以下示例数据。
Student ID | First Name | Last Name | Phone | City |
---|---|---|---|---|
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,名字,姓氏,电话号码和城市。
首先,使用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
浏览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
在Hadoop DFS中,您可以使用命令mkdir创建目录。在HDFS中,在所需路径中创建一个名为Pig_Data的新目录,如下所示。
$cd /$Hadoop_Home/bin/
$ hdfs dfs -mkdir hdfs://localhost:9000/Pig_Data
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://localhost:9000/pig_data/
您可以使用cat命令来验证文件是否已移动到HDFS中,如下所示。
$ cd $HADOOP_HOME/bin
$ hdfs dfs -cat hdfs://localhost: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
您可以使用Pig Latin的LOAD运算符从文件系统(HDFS /本地)将数据加载到Apache Pig中。
load语句由两部分组成,除以“ =”运算符。在左侧,我们需要提一下,我们要存储的数据关系的名称,并在右边,我们要定义我们如何存储数据。下面给出的是Load运算符的语法。
Relation_name = LOAD 'Input file path' USING function as schema;
哪里,
Relation_name-我们必须提及要在其中存储数据的关系。
输入文件路径-我们不得不提到文件存储的HDFS目录。 (在MapReduce模式下)
函数-我们必须从Apache Pig提供的加载函数集( BinStorage,JsonLoader,PigStorage,TextLoader )中选择一个函数。
模式-我们必须定义数据的模式。我们可以定义所需的架构,如下所示:
(column1 : data type, column2 : data type, column3 : data type);
注意-我们加载数据时未指定架构。在这种情况下,这些列的地址将为$ 01,$ 02等(检查)。
例如,让我们使用LOAD命令在名为Student的模式下将Pig中的student_data.txt中的数据加载。
首先,打开Linux终端。如下所示,以MapReduce模式启动Pig Pigunt外壳。
$ Pig –x mapreduce
它将启动Pig Pigunt外壳,如下所示。
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>
现在,通过在Grunt shell中执行以下Pig Latin语句,将文件Student_data.txt中的数据加载到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 | We have stored the data in the schema student. | ||||||||||||
Input file path | We are reading data from the file student_data.txt, which is in the /pig_data/ directory of HDFS. | ||||||||||||
Storage function | We have used the PigStorage() function. It loads and stores data as structured text files. It takes a delimiter using which each entity of a tuple is separated, as a parameter. By default, it takes ‘\t’ as a parameter. | ||||||||||||
schema |
We have stored the data using the following schema.
|
注– load语句将简单地将数据加载到Pig中的指定关系中。要验证Load语句的执行,您必须使用在下一章中讨论的诊断操作符。