Pig的安装及基本使用

一、PIG介绍

  Pig是MapReduce的一个抽象。它是一个工具/平台,用于分析较大的数据集,并将它们表示为数据流。Pig通常与 Hadoop 一起使用;我们可以使用Pig在Hadoop中执行所有的数据处理操作。

要编写数据分析程序,Pig提供了一种称为 Pig Latin 的高级语言。该语言提供了各种操作符,程序员可以利用它们开发自己的用于读取,写入和处理数据的功能。

要使用  Pig 分析数据,程序员需要使用Pig Latin语言编写脚本。所有这些脚本都在内部转换为Map和Reduce任务。Apache Pig有一个名为 Pig Engine 的组件,它接受Pig Latin脚本作为输入,并将这些脚本转换为MapReduce作业。

引:https://www.w3cschool.cn/apache_pig/apache_pig_overview.html

二、PIG安装

1.解压pig安装包,并将pig-0.13.0移动到pig,使用更加方便

[hadoop@MASTER ~]$ tar xf pig-0.13.0.tar.gz

[hadoop@MASTER ~]$ mv pig-0.13.0 pig

2.配置PIG环境变量

[hadoop@MASTER ~]$ vim .bash_profile

#pig

export PIG_HOME=/home/hadoop/pig

export PATH=$PATH:$PIG_HOME/bin:$PIG_HOME/conf

#添加PIG_CLASSPATH,使PIG识别hadoop的NameNode和JobTracker

export PIG_CLASSPATH=$HADOOP_HOME/etc/hadoop

使环境变量生效

[hadoop@MASTER ~]$ source .bash_profile 

3.创建日志文件目录,否则目录会在hadoop用户目录下生成

[hadoop@MASTER ~]$ mkdir -p /home/hadoop/pig/logs

[hadoop@MASTER ~]$ vim /home/hadoop/pig/conf/pig.properties

pig.logfile=/home/hadoop/pig/logs

4.查看PIG是否安装成功
Hadoop集群已启动

start-all.sh

帮助信息出现,安装完成。

三、PIG运行模式

Local模式

本地模式下,Pig运行在单个JVM中,访问本地文件系统,该模式用于测试或处理小规模数据集

[hadoop@MASTER ~]$ pig -x local
#退出
grunt> quit

MapReduce模式

在MapReduce模式下,Pig将查询翻译为MapReduce作业,然后在Hadoop集群上执行

[hadoop@MASTER ~]$ pig -x mapreduce
#退出
grunt> quit

四、PIG Latin介绍

这里就不写了,介绍一篇博文吧!很详细!

http://www.aboutyun.com/thread-6713-1-1.html

也可以去参考w3cschool中PIG的详细教程

https://www.w3cschool.cn/apache_pig/

五、实例

要求

在本地文件系统创建三个文件student.txt,course.txt,sc.txt,分别存储学生信息,课程信息,选课信息。实现找出不及格的学生,并且输出学生的姓名和不及格课程和成绩。样例数据如下:

201000101:李勇:男:20:计算机软件与理论
201000102:王丽:女:19:计算机软件与理论
201000103:刘花:女:18:计算机应用技术
201000104:李肖:男:19:计算机系統结构
201000105:吴达:男:19:计算机系统结构
201000106:滑可:男:19:计算机系统结构

学生信息student.txt(学号,姓名,性别,年龄,专业)

01,English,4
02,Data structure,2
03,DataBase,2
04,DB Design,3
05,C Language,3
06,Principles of Network,3
07,0S,3

 课程信息course.txt(课号,课程名,学分)

201000101,01,92
201000101,03,84
201000102,01,90
201000102,02,94
201000102,03,82
201000103,01,72
201000103,02,90
201000104,03,58

选课信息sc.txt(学号,课号,成绩)

过程

1.三个要处理的文件信息

[hadoop@MASTER test1]$ vim student.txt

201000101:李勇:男;20;计算机软件与理论

201000102:王丽:女:19:计算机软件与理论

201000103:刘花:女:18:计算机应用技术

201000104:李肖:男:19:计算机系統结构

201000105:吴达:男:19:计算机系统结构

201000106:滑可:男:19:计算机系统结构

[hadoop@MASTER test1]$ vim course.txt

01 English,4

02 Data structure,2

03 DataBase,2

04 DB Design,3

05 C Language,3

06 Principles of Network,3

07 0S,3

[hadoop@MASTER test1]$ vim sc.txt

201000101,01,92

201000101,03,84

201000102,01,90

201000102,02,94

201000102,03,82

201000103,01,72

201000103,02,90

201000104,03,58

2.在HDFS上创建pig目录,用于存放三个要处理的文件

[hadoop@MASTER ~]$ hadoop fs -mkdir /pig

3.PIG在mapreduce模式下运行

执行时,先查看文末红字提示,否则会报错!

[hadoop@MASTER ~]$ pig -x mapreduce
#上传本地数据到HDFS
grunt> fs -copyFromLocal /home/hadoop/test1/student.txt /pig

grunt> fs -copyFromLocal /home/hadoop/test1/sc.txt /pig

grunt> fs -copyFromLocal /home/hadoop/test1/course.txt /pig

#将student.txt加载到Pig中,以:分割,指定五列Sno,Sname,Ssex,Sage,Sdept
grunt> A= load '/pig/student.txt' using PigStorage(':') as (Sno:chararray,Sname:chararray,Ssex:chararray,Sage:int,Sdept:chararray);

#查看经过处理后的信息A
grunt> dump A;

grunt> B= load '/pig/sc.txt' using PigStorage(',') as (Sno:chararray,Cno:chararray,Grade:int);
grunt> dump B;
grunt> C= load '/pig/course.txt' using PigStorage(',') as (Cno:chararray,Cname:chararray,Ccredit:int);
grunt> dump C;

#根据条件从B中选择所需的信息
grunt> D= Filter B By Grade <60;

#组合来自A和D关系的记录
grunt> E= Join D By Sno,A By Sno;

#组合来自E和C关系的记录
grunt> F= Join E By Cno,C By Cno;

#基于列数据生成指定的数据转换
grunt> G= foreach F generate Sname,Cname,Grade;
grunt> dump G;
(李肖,DataBase,58)
输出不及格学生的姓名和不及格课程和成绩
#退出
grunt> quit

 执行最后一步dump G或者dump A等可能出现如下情况,但最后会输出正确结果:

关于10020端口拒绝连接的问题的解决:

完善如下红字

[hadoop@MASTER ~]$ vim /home/hadoop/hadoop/etc/hadoop/mapred-site.xml

<configuration>
      <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
                <final>true</final>
        </property>
        <property>
        <name>mapreduce.jobhistory.address</name>
        <value>MASTER:10020</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>MASTER:19888</value>
    </property>

</configuration>

然后开启JobHistoryServer

[hadoop@MASTER ~]$ mr-jobhistory-daemon.sh start historyserver

参考

[1]https://bit1129.iteye.com/blog/2170665

[2]https://www.w3cschool.cn/apache_pig/

[3]http://www.aboutyun.com/thread-6713-1-1.html

猜你喜欢

转载自blog.csdn.net/yuanfangPOET/article/details/85052909
pig