- Apache Pig 教程
- Apache Pig - 首页
- Apache Pig 简介
- Apache Pig - 概述
- Apache Pig - 架构
- Apache Pig 环境
- Apache Pig - 安装
- Apache Pig - 执行
- Apache Pig - Grunt Shell
- Pig Latin
- Pig Latin - 基础
- 加载与存储操作符
- Apache Pig - 读取数据
- Apache Pig - 存储数据
- 诊断操作符
- Apache Pig - 诊断操作符
- Apache Pig - Describe 操作符
- Apache Pig - Explain 操作符
- Apache Pig - Illustrate 操作符
- Pig Latin 内置函数
- Apache Pig - Eval 函数
- 加载与存储函数
- Apache Pig - Bag 与 Tuple 函数
- Apache Pig - 字符串函数
- Apache Pig - 日期时间函数
- Apache Pig - 数学函数
- Apache Pig 有用资源
- Apache Pig - 快速指南
- 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 | 名 | 姓 | 电话 | 城市 |
---|---|---|---|---|
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://127.0.0.1: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://127.0.0.1:9000/pig_data/
验证文件
您可以使用cat命令验证文件是否已移动到 HDFS,如下所示。
$ cd $HADOOP_HOME/bin $ hdfs dfs -cat hdfs://127.0.0.1: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
Load 操作符
您可以使用Pig Latin的LOAD操作符从文件系统(HDFS/本地)将数据加载到 Apache Pig。
语法
load 语句由“=”运算符分隔的两部分组成。在左侧,我们需要提及我们想要存储数据的关系名称,在右侧,我们必须定义我们如何存储数据。以下是Load操作符的语法。
Relation_name = LOAD 'Input file path' USING function as schema;
其中,
relation_name − 我们必须提及我们想要存储数据的关联。
输入文件路径 − 我们必须提及存储文件的 HDFS 目录。(在 MapReduce 模式下)
function − 我们必须从 Apache Pig 提供的加载函数集(BinStorage, JsonLoader, PigStorage, TextLoader)中选择一个函数。
Schema − 我们必须定义数据的模式。我们可以按如下方式定义所需的模式:
(column1 : data type, column2 : data type, column3 : data type);
注意 − 我们在不指定模式的情况下加载数据。在这种情况下,列将分别称为 $01、$02 等……(检查)。
示例
例如,让我们使用LOAD命令将student_data.txt中的数据加载到 Pig 中名为Student的模式下。
启动 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://127.0.0.1:9000 grunt>
执行 Load 语句
现在,通过在 Grunt shell 中执行以下 Pig Latin 语句,将数据从student_data.txt文件加载到 Pig 中。
grunt> student = LOAD 'hdfs://127.0.0.1:9000/pig_data/student_data.txt' USING PigStorage(',') as ( id:int, firstname:chararray, lastname:chararray, phone:chararray, city:chararray );
以下是上述语句的描述。
关系名称 | 我们将数据存储在student模式中。 | ||||||||||||
输入文件路径 | 我们正在读取位于 HDFS 的 /pig_data/ 目录中的student_data.txt文件中的数据。 | ||||||||||||
存储函数 | 我们使用了PigStorage()函数。它将数据加载并存储为结构化文本文件。它将每个元组的实体分隔的定界符作为参数。默认情况下,它将“\t”作为参数。 | ||||||||||||
模式 | 我们使用以下模式存储数据。
|
注意 − load语句只会将数据加载到 Pig 中指定的关联中。要验证Load语句的执行,您必须使用诊断操作符,这将在接下来的章节中讨论。