返回介绍

Pig 读取数据

发布于 2024-06-23 16:54:50 字数 10601 浏览 0 评论 0 收藏 0

通常,Apache Pig在Hadoop之上工作。它是一种分析工具,用于分析存在于大型数据集(Hadoop File System)。要使用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,名字,姓氏,电话号码和城市。

步骤 1:验证Hadoop
首先,使用Hadoop版本命令验证安装,如下所示。

  1. $ hadoop version

如果您的系统包含Hadoop,并且已设置PATH变量,则将获得以下输出:

  1. $ hadoop version
  2. Hadoop 3.3.0
  3. Source code repository https://gitbox.apache.org/repos/asf/hadoop.git -r aa96f1871bfd858f9bac59cf2a81ec470da649af
  4. Compiled by brahma on 2020-07-06T18:44Z
  5. Compiled with protoc 3.7.1
  6. From source with checksum 5dc29b802d6ccd77b262ef9d04d19c4
  7. This command was run using /usr/local/hadoop/share/hadoop/common/hadoop-common-3.3.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 hdfs://localhost:9000/Pig_Data/

验证文件
您可以使用cat命令来验证文件是否已移动到HDFS中,如下所示。

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

输出
您可以看到文件的内容,如下所示。

  1. $ hdfs dfs -cat hdfs://localhost:9000/Pig_Data/student_data.txt
  2. 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
  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命令在名为Student的模式下将Pig中的student_data.txt中的数据加载。

启动 Grunt Shell

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

  1. $ Pig -x mapreduce

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

  1. $ pig -x mapreduce
  2. 2021-01-12 09:29:36,392 INFO pig.ExecTypeProvider: Trying ExecType : LOCAL
  3. 2021-01-12 09:29:36,394 INFO pig.ExecTypeProvider: Trying ExecType : MAPREDUCE
  4. 2021-01-12 09:29:36,397 INFO pig.ExecTypeProvider: Picked MAPREDUCE as the ExecType
  5. 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
  6. 2021-01-12 09:29:36,476 [main] INFO org.apache.pig.Main - Logging error messages to: /home/jc2182/pigtest/pig_1610414976470.log
  7. 2021-01-12 09:29:36,542 [main] INFO org.apache.pig.impl.util.Utils - Default bootup file /home/jc2182/.pigbootup not found
  8. 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
  9. 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
  10. 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
  11. 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
  12. 2021-01-12 09:29:37,532 [main] WARN org.apache.pig.PigServer - ATS is disabled since yarn.timeline-service.enabled set to false
  13. grunt>

执行Load语句

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

  1. 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 我们已经使用以下架构存储了数据。
    1. column id firstname lastname phone city
    2. datatype int char array char array char array char array

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文