课程表

Apache Pig 基础

Apache Pig 诊断运算符

Apache Pig 分组和连接

Apache Pig 合并和拆分

Apache Pig 过滤

Apache Pig 排序

Pig Latin 内置函数

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名字姓氏电话号码城市
001RajivReddy9848022337Hyderabad
002siddarthBattacharya9848022338Kolkata
003RajeshKhanna9848022339Delhi
004PreethiAgarwal9848022330Pune
005TrupthiMohanthy9848022336Bhuwaneshwar
006ArchanaMishra9848022335Chennai

上述数据集包含六个学生的个人详细信息,如id,名字,姓氏,电话号码和城市。

步骤1:验证Hadoop

首先,使用Hadoop version命令验证安装,如下所示。

  1. $ hadoop version

如果你的系统里有Hadoop,并且已设置PATH变量,那么你将获得以下输出 -

  1. Hadoop 2.6.0
  2. Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r
  3. e3496499ecb8d220fba99dc5ed4c99c8f9e33bb1
  4. Compiled by jenkins on 2014-11-13T21:10Z
  5. Compiled with protoc 2.5.0
  6. From source with checksum 18e43357c8f927c0695f1e9522859d6a
  7. This command was run using /home/Hadoop/hadoop/share/hadoop/common/hadoop
  8. common-2.6.0.jar

步骤2:启动HDFS

浏览Hadoop的 sbin 目录,并启动 yarn 和Hadoop dfs(分布式文件系统),如下所示。

  1. cd /$Hadoop_Home/sbin/
  2. $ start-dfs.sh
  3. localhost: starting namenode, logging to /home/Hadoop/hadoop/logs/hadoopHadoop-namenode-localhost.localdomain.out
  4. localhost: starting datanode, logging to /home/Hadoop/hadoop/logs/hadoopHadoop-datanode-localhost.localdomain.out
  5. Starting secondary namenodes [0.0.0.0]
  6. starting secondarynamenode, logging to /home/Hadoop/hadoop/logs/hadoop-Hadoopsecondarynamenode-localhost.localdomain.out
  7. $ start-yarn.sh
  8. starting yarn daemons
  9. starting resourcemanager, logging to /home/Hadoop/hadoop/logs/yarn-Hadoopresourcemanager-localhost.localdomain.out
  10. localhost: starting nodemanager, logging to /home/Hadoop/hadoop/logs/yarnHadoop-nodemanager-localhost.localdomain.out

步骤3:在HDFS中创建目录

在Hadoop DFS中,可以使用 mkdir 命令创建目录。在HDFS所需路径中创建一个名为 Pig_Data 的新目录,如下所示。

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

步骤4:将数据放在HDFS中

Pig的输入文件包含单个行中的每个元组/记录。记录的实体由分隔符分隔(在我们的示例中,我们使用“,”)。在本地文件系统中,创建一个包含数据的输入文件 student_data.txt ,如下所示。

  1. 001,Rajiv,Reddy,9848022337,Hyderabad
  2. 002,siddarth,Battacharya,9848022338,Kolkata
  3. 003,Rajesh,Khanna,9848022339,Delhi
  4. 004,Preethi,Agarwal,9848022330,Pune
  5. 005,Trupthi,Mohanthy,9848022336,Bhuwaneshwar
  6. 006,Archana,Mishra,9848022335,Chennai.

现在,使用 put 命令将文件从本地文件系统移动到HDFS,如下所示。(你也可以使用 copyFromLocal 命令。)

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

验证文件

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

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

输出

现在,可以看到文件的内容,如下所示。

  1. 15/10/01 12:16:55 WARN util.NativeCodeLoader: Unable to load native-hadoop
  2. library for your platform... using builtin-java classes where applicable
  3. 001,Rajiv,Reddy,9848022337,Hyderabad
  4. 002,siddarth,Battacharya,9848022338,Kolkata
  5. 003,Rajesh,Khanna,9848022339,Delhi
  6. 004,Preethi,Agarwal,9848022330,Pune
  7. 005,Trupthi,Mohanthy,9848022336,Bhuwaneshwar
  8. 006,Archana,Mishra,9848022335,Chennai

Load运算符

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

语法

load语句由两部分组成,用“=”运算符分隔。在左侧,需要提到我们想要存储数据的关系的名称;而在右侧,我们需要定义如何存储数据。下面给出了 Load 运算符的语法。

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

说明:

  • relation_name - 我们必须提到要存储数据的关系。

  • Input file path - 我们必须提到存储文件的HDFS目录。(在MapReduce模式下)

  • function - 我们必须从Apache Pig提供的一组加载函数中选择一个函数 BinStorage,JsonLoader,PigStorage,TextLoader 

  • Schema - 我们必须定义数据的模式,可以定义所需的模式如下 -

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

注意:我们加载数据而不指定模式。在这种情况下,列将被寻址为$01,$02,等...(检查)。

例如,我们使用 LOAD 命令,在名为学生的模式下在Pig中的 student_data.txt 加载数据。

启动Pig Grunt Shell

首先,打开Linux终端。在MapReduce模式下启动Pig Grunt shell,如下所示。

  1. $ Pig x mapreduce

它将启动Pig Grunt shell,如下所示。

  1. 15/10/01 12:33:37 INFO pig.ExecTypeProvider: Trying ExecType : LOCAL
  2. 15/10/01 12:33:37 INFO pig.ExecTypeProvider: Trying ExecType : MAPREDUCE
  3. 15/10/01 12:33:37 INFO pig.ExecTypeProvider: Picked MAPREDUCE as the ExecType
  4.  
  5. 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
  6. 2015-10-01 12:33:38,080 [main] INFO org.apache.pig.Main - Logging error messages to: /home/Hadoop/pig_1443683018078.log
  7. 2015-10-01 12:33:38,242 [main] INFO org.apache.pig.impl.util.Utils - Default bootup file /home/Hadoop/.pigbootup not found
  8. 2015-10-01 12:33:39,630 [main]
  9. INFO org.apache.pig.backend.hadoop.executionengine.HExecutionEngine - Connecting to hadoop file system at: hdfs://localhost:9000
  10. grunt>

执行Load语句

现在,通过在Grunt shell中执行以下Pig Latin语句,将文件 student_data.txt 中的数据加载到Pig中。

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

以下是对上述说明的描述。

Relation name我们已将数据存储在学生(student)模式中。
Input file path我们从HDFS的/pig_data/目录中的 student_data.txt 文件读取数据。
Storage function我们使用了 PigStorage() 函数,将数据加载并存储为结构化文本文件。它采用分隔符,使用元组的每个实体作为参数分隔。默认情况下,它以“\t"作为参数。
schema

我们已经使用以下模式存储了数据。

columnid名字姓氏电话号码城市
datatypeintchar arraychar arraychar arraychar array

注意: Load语句会简单地将数据加载到Pig的指定的关系中。要验证Load语句的执行情况,必须使用Diagnostic运算符,这将在后续的章节中讨论。

转载本站内容时,请务必注明来自W3xue,违者必究。
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号