📜  Apache Pig-读取数据

📅  最后修改于: 2020-12-02 05:32:30             🧑  作者: Mango


通常,Apache Pig在Hadoop之上工作。它是一种分析工具,用于分析存在在H adoop˚FILE体系大型数据集。要使用Apache Pig分析数据,我们必须首先将数据加载到Apache Pig中。本章说明如何从HDFS将数据加载到Apache Pig。

准备HDFS

在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,名字,姓氏,电话号码和城市。

步骤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://localhost: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://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中的数据加载

启动猪咕Shell壳

首先,打开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.

column id firstname lastname phone city
datatype int char array char array char array char array

load语句将简单地将数据加载到Pig中的指定关系中。要验证Load语句的执行,您必须使用在下一章中讨论的诊断操作符