- Pig 教程
- Pig 体系结构
- Pig 安装
- Pig 执行
- Pig Grunt Shell
- Pig Latin 基础
- Pig 读取数据
- Pig 存储数据
- Pig Dump 运算符
- Pig Describe 运算符
- Pig Explain 运算符
- Pig illustrate 运算符
- Pig GROUP 运算符
- Pig Cogroup 运算符
- Pig JOIN 运算符
- Pig Cross 运算符
- Pig Union 运算符
- Pig SPLIT 运算符
- Pig FILTER 运算符
- Pig DISTINCT 运算符
- Pig FOREACH 运算符
- Pig ORDER BY 运算符
- Pig LIMIT 运算符
- Pig eval(求值) 函数
- Pig Load & Store 函数
- Pig Bag & Tuple 函数
- Pig 字符串(String)函数
- Pig 日期时间函数
- Pig 数学函数
Pig 读取数据
通常,Apache Pig在Hadoop之上工作。它是一种分析工具,用于分析存在于大型数据集(Hadoop File System)。要使用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 version
Hadoop 3.3.0
Source code repository https://gitbox.apache.org/repos/asf/hadoop.git -r aa96f1871bfd858f9bac59cf2a81ec470da649af
Compiled by brahma on 2020-07-06T18:44Z
Compiled with protoc 3.7.1
From source with checksum 5dc29b802d6ccd77b262ef9d04d19c4
This command was run using /usr/local/hadoop/share/hadoop/common/hadoop-common-3.3.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 hdfs://localhost:9000/Pig_Data/
验证文件
您可以使用cat命令来验证文件是否已移动到HDFS中,如下所示。
$ cd $HADOOP_HOME/bin
$ hdfs dfs -cat hdfs://localhost:9000/Pig_Data/student_data.txt
输出
您可以看到文件的内容,如下所示。
$ hdfs dfs -cat hdfs://localhost:9000/Pig_Data/student_data.txt
2021-01-12 09:21:38,204 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/Local)将数据加载到Apache Pig中。
语法
load语句由两部分组成,以“=”运算符为界。在左侧,我们需要提及的关系的名称这里我们要存储的数据,在右边,我们要定义如何,我们存储数据。下面给出的是Load运算符的语法。
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:我们必须定义数据的模式。我们可以定义所需的架构,如下所示:
注意:我们在不指定架构的情况下加载数据。在这种情况下,这些列的地址为$01,$02等(检查)。(column1 : data type, column2 : data type, column3 : data type);
例如,让我们使用LOAD命令在名为Student的模式下将Pig中的student_data.txt中的数据加载。
启动 Grunt Shell
首先,打开Linux终端。如下所示,以MapReduce模式启动Pig Pigunt shell。
$ Pig -x mapreduce
它将启动Pig Pigunt shell,如下所示。
$ pig -x mapreduce
2021-01-12 09:29:36,392 INFO pig.ExecTypeProvider: Trying ExecType : LOCAL
2021-01-12 09:29:36,394 INFO pig.ExecTypeProvider: Trying ExecType : MAPREDUCE
2021-01-12 09:29:36,397 INFO pig.ExecTypeProvider: Picked MAPREDUCE as the ExecType
2021-01-12 09:29:36,476 [main] INFO org.apache.pig.Main - Apache Pig version 0.17.0 (r1797386) compiled Jun 02 2017, 15:41:58
2021-01-12 09:29:36,476 [main] INFO org.apache.pig.Main - Logging error messages to: /home/jc2182/pigtest/pig_1610414976470.log
2021-01-12 09:29:36,542 [main] INFO org.apache.pig.impl.util.Utils - Default bootup file /home/jc2182/.pigbootup not found
2021-01-12 09:29:36,867 [main] WARN org.apache.hadoop.util.NativeCodeLoader - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
2021-01-12 09:29:36,887 [main] INFO org.apache.hadoop.conf.Configuration.deprecation - mapred.job.tracker is deprecated. Instead, use mapreduce.jobtracker.address
2021-01-12 09:29:36,887 [main] INFO org.apache.pig.backend.hadoop.executionengine.HExecutionEngine - Connecting to hadoop file system at: hdfs://localhost:9000
2021-01-12 09:29:37,532 [main] INFO org.apache.pig.PigServer - Pig Script ID for the session: PIG-default-7f2f74a8-9483-4f79-811a-72c05283f084
2021-01-12 09:29:37,532 [main] WARN org.apache.pig.PigServer - ATS is disabled since yarn.timeline-service.enabled set to false
grunt>
执行Load语句
现在,通过在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 schema中。
- Input file path 我们从文件中读取数据student_data.txt,这是HDFS的/pig_data/目录。
- Storage function 我们使用了PigStorage()函数。它将数据加载并存储为结构化文本文件。它使用一个分隔符作为参数,使用该分隔符可以将元组的每个实体分开。默认情况下,它将“\t”作为参数。
- schema 我们已经使用以下架构存储了数据。
column id firstname lastname phone city
datatype int char array char array char array char array
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论