一、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