开发手册 欢迎您!
软件开发者资料库

Apache Pig - 阅读数据

Apache Pig阅读数据 - 从概述,架构,安装,执行,Grunt Shell,Pig Latin Basics,读取数据,存储数据,诊断运算符,Describe运算符,Explain运算符,Illustrate运算符,Group运算符,Cogroup运算符,Join操作员,跨操作员,联合操作员,拆分操作员,过滤操作员,不同操作员,Foreach操作员,订单依据,限制操作员,评估函数,加载和存储函数,包和元组函数,字符串函数,日期时间函数,数学函数,用户定义的函数,运行脚本。

通常,Apache Pig在Hadoop之上运行.它是一种分析工具,可分析 H adoop F ile S 系统中存在的大型数据集.要使用Apache Pig分析数据,我们必须首先将数据加载到Apache Pig中.本章介绍如何从HDFS向Apache Pig加载数据.

准备HDFS

在MapReduce模式下,Pig从HDFS读取(加载)数据将结果存储回HDFS.因此,让我们启动HDFS并在HDFS中创建以下示例数据.

Student IDFirst NameLast NamePhoneCity
001RajivReddy9848022337Hyderabad
002siddarthBattacharya9848022338Kolkata
003RajeshKhanna9848022339Delhi
004PreethiAgarwal9848022330Pune
005TrupthiMohanthy9848022336Bhuwaneshwar
006ArchanaMishra9848022335Chennai

上述数据集包含id,first name,last等个人详细信息姓名,电话号码和城市,六名学生.

第1步:验证Hadoop

首先,使用Hadoop版本命令验证安装,如下所示.

$ hadoop version

如果您的系统包含Hadoop,如果你设置了PATH变量,那么你将获得以下输出 :

Hadoop 2.6.0 Subversion https://img01.yuandaxia.cn/Content/img/tutorials/apache_pig/asf -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/hadoopcommon-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,Hyderabad002,siddarth,Battacharya,9848022338,Kolkata003,Rajesh,Khanna,9848022339,Delhi004,Preethi,Agarwal,9848022330,Pune005,Trupthi,Mohanthy,9848022336,Bhuwaneshwar006,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-hadooplibrary for your platform... using builtin-java classes where applicable  001,Rajiv,Reddy,9848022337,Hyderabad002,siddarth,Battacharya,9848022338,Kolkata003,Rajesh,Khanna,9848022339,Delhi004,Preethi,Agarwal,9848022330,Pune005,Trupthi,Mohanthy,9848022336,Bhuwaneshwar006,Archana,Mishra,9848022335,Chennai

负载运算符

您可以使用 Pig Latin LOAD 运算符从文件系统(HDFS/Local)将数据加载到Apache Pig.

语法

load语句由两部分组成,除以"="运算符.在左侧,我们需要提及我们要存储数据的关系 where 的名称,在右侧,我们必须定义如何我们存储数据.下面给出了加载运算符的语法.

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 命令在名为学生的模式下的Pig中的 student_data.txt 中的数据.

启动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 : LOCAL15/10/01 12:33:37 INFO pig.ExecTypeProvider: Trying ExecType : MAPREDUCE15/10/01 12:33:37 INFO pig.ExecTypeProvider: Picked MAPREDUCE as the ExecType2015-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:352015-10-01 12:33:38,080 [main] INFO  org.apache.pig.Main - Logging error messages to: /home/Hadoop/pig_1443683018078.log2015-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>

执行加载语句

现在加载文件中的数据 student_data.txt 通过在Grunt shell中执行以下Pig Latin语句进入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 );

以下是上述声明的描述.

关系名称我们已将数据存储在架构 student 中.



输入文件路径我们正在读取文件中的数据 student_data .txt,位于HDFS的/pig_data/目录中.



存储功能我们使用了 PigStorage()函数.它将数据加载并存储为结构化文本文件.它采用分隔符作为参数,使用分隔符将元组的每个实体分开.默认情况下,它将'\ t'作为参数.



schema

我们使用以下模式存储数据.





columnidfirstnamelastnamephonecity
datatypeintchar数组char数组char数组char数组

注意 :   load 语句只是将数据加载到Pig中的指定关系中.要验证 Load 语句的执行,您必须使用 Diagnostic Operators ,这将在下一章中讨论.