Apache Pig – 读取数据

Apache Pig – 读取数据


一般来说,Apache Pig 工作在 Hadoop 之上。它是一种分析工具,用于分析存在于大型数据集ħ adoop ˚F ILE小号ystem。要使用 Apache Pig 分析数据,我们必须首先将数据加载到 Apache Pig。本章介绍如何从 HDFS 将数据加载到 Apache Pig。

准备 HDFS

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

Student ID 电话 城市
001 拉吉夫 雷迪 9848022337 海得拉巴
002 悉达斯 巴塔查里亚 9848022338 加尔各答
003 拉杰什 卡纳 9848022339 德里
004 普瑞提 阿加瓦尔 9848022330 浦那
005 特鲁蒂 莫汉西 9848022336 布瓦内什瓦尔
006 阿卡纳 米什拉 9848022335 钦奈

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

步骤 1:验证 Hadoop

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

$ 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

浏览Hadoopsbin目录,启动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;

在哪里,

  • 关系名称– 我们必须提到我们要存储数据的关系。

  • 输入文件路径– 我们必须提到存储文件的 HDFS 目录。(在 MapReduce 模式下)

  • function – 我们必须从 Apache Pig 提供的加载函数集中选择一个函数(BinStorage、JsonLoader、PigStorage、TextLoader)。

  • 架构– 我们必须定义数据的架构。我们可以定义所需的架构如下 –

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

注意– 我们在不指定架构的情况下加载数据。在这种情况下,列将被寻址为 $01、$02 等……(检查)。

例子

例如,让我们使用LOAD命令在名为Student的模式下加载Pigstudent_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 : 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 我们已将数据存储在模式student 中
Input file path 我们正在从文件student_data.txt中读取数据,该文件位于 HDFS 的 /pig_data/ 目录中。
Storage function 我们已经使用了PigStorage()函数。它将数据加载和存储为结构化文本文件。它需要一个分隔符,使用它来分隔元组的每个实体,作为参数。默认情况下,它采用 ‘\t’ 作为参数。
schema

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

column ID 电话 城市
datatype 整数 字符数组 字符数组 字符数组 字符数组

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

觉得文章有用?

点个广告表达一下你的爱意吧 !😁