一、前提
1、 hadoop集群环境配置好(本人hadoop版本:hadoop-2.7.3)
2、 windows基础环境准备:
jdk环境配置、esclipse环境配置
二、搭建pig环境
1、下载pig:
在Apache下载最新的Pig软件包,点击下载会推荐最快的镜像站点,以下为下载地址:http://mirror.bit.edu.cn/apache/pig/
2、上传pig(我的是上传到/opt/bigdata下面)
3、解压缩
[hadoop@wangmaster sbin]$ cd /opt/bigdata/[hadoop@wangmaster bigdata]$lsdocs hadoop-2.7.3.tar.gz hbase-1.2.5-bin.tar.gz jdk1.8.tar.gz opt pig-0.17.0 zookeeper-3.4.10hadoop-2.7.3 hbase-1.2.5 jdk1.8 maxtemperaurte.jar output pig-0.17.0.tar.gz zookeeper-3.4.10.tar.gz
[hadoop@wangmaster bigdata]$tar -xzvf pig-0.17.0
4、设置环境变量
sudo vi /etc/profile
##设置pig的class路径和在path加入pig的路径,其中PIG_CLASSPATH参数是设置pig在MapReduce工作模式:
export PIG_HOME=/opt/bigdata/pig-0.17.0export PATH=$PATH: /opt/bigdata/hadoop-2.7.3/bin:$PIG_HOME/bin
##确认生效
source/etc/profile
5、验证安装完成
重新登录终端,确保hadoop集群启动,键入pig命令,应该能看到pig连接到hadoop集群的信息并且进入了grunt shell命令行模式:
如果需要退出的话,在pig的grunt shell下键入quit即可。
三、实例
如果在启动hadoop集群时候start-all.sh里面没有包含mapreduce.jobhistory.address这一项?那么进行手动启动。
./mr-jobhistory-daemon.sh start historyserver (在hadoop路径下sbin下执行)
实例要求:这里我们给出一个学生表(学号,姓名,性别,年龄,所在系),其中含有如下几条记录并保存在/opt/bigdata/ziliao/student.txt文件:
201000101:Lihua:men:20:CST201000102:Wangli:women:19:CST201000103:Xiangming:women:18:CAT201000104:Lixiao:men:19:CST201000105:Wuda:women:19:CA201000106:Huake:men:21:CST201000107:Beihang:men:20:CA201000108:Bob:women:17:CAT201000109:Smith:men:19:CAT201000110:Gxl:men:19:CST201000111:Songwei:women:19:CA201000112:Weihua:men:21:CAT201000113:Weilei:women:18:CA201000114:Luozheng:men:19:CA201000115:Shangsi:women:20:CAT201000116:Fandong:men:19:CST201000117:Laosh:women:22:CAT201000118:Haha:men:19:CA
它们所对应的数据类型如下所示:
Student(sno:chararray, sname:chararray, ssex:chararray, sage:int,
sdept:chararray)
我们将在不同的运行方式下取出各个学生的姓名和年龄两个字段,执行结果如下:
(Lihua,20)
(Wangli,19)
(Xiangming,18)
(Lixiao,19)
(Wuda,19)
(Huake,21)
(Beihang,20)
(Bob,17)
(Smith,19)
(Gxl,19)
(Songwei,19)
(Weihua,21)
(Weilei,18)
(Luozheng,19)
(Shangsi,20)
(Fandong,19)
(Laosh,22)
(Haha,19)
1、local模式
进入grunt shell模式
[hadoop@wangmaster sbin]$ pig -x local--加载数据(注意“=”左右两边要空格)
grunt> A = load '/opt/bigdata/ziliao/student.txt' using PigStorage(':') as (sno:chararray, sname:chararray, ssex:chararray, sage:int, sdept:chararray);--从A中选出Student相应的字段(注意“=”左右两边要空格)
grunt> B =foreach A generate sname, sage;--将B中的内容输出到屏幕上
grunt> dump B;
--将B的内容输出到本地文件中
grunt> store B into '/opt/bigdata/ziliao/result.txt';--查看本地文件内容,没有''grunt> cat /opt/bigdata/ziliao/result.txt;
(上面另一种执行方式—脚本文件)将下面语句存储到script.pig中(script.pig文件内容如下)
A = load '/opt/bigdata/ziliao/student.txt' using PigStorage(':') as (sno:chararray, sname:chararray, ssex:chararray, sage:int, sdept:chararray);
B=foreach A generate sname, sage;
dump B;
store B into'/opt/bigdata/ziliao/result1.txt';
执行pig -x local script.pig命令
查看结果:grunt> cat /opt/bigdata/ziliao/result.txt;
2、 MapReduce模式
首先将/opt/bigdata/ziliao/student.txt放到hadoop的in目录下
hadoop dfs-put /opt/bigdata/ziliao/student.txt /in输入pig,进入shell编辑模式下
grunt> ls /inhdfs://wangmaster:9000/docs 104
hdfs://wangmaster:9000/hbase
hdfs://wangmaster:9000/input
hdfs://wangmaster:9000/output
hdfs://wangmaster:9000/student.txt 525
hdfs://wangmaster:9000/tmp
hdfs://wangmaster:9000/wang
然后对其进行操作
输入目录变为hdfs://wangmaster:9000/in/student.txt
输出目录变为hdfs://wangmaster:9000/in/result.txt
(注意:脚本也是如此)。
A = load 'hdfs://wangmaster:9000/student.txt' using PigStorage(':') as (sno:chararray, sname:chararray, ssex:chararray, sage:int, sdept:chararray);
B=foreach A generate sname, sage;
dump B;
store B into'hdfs://wangmaster:9000/result0.txt'
cat hdfs://wangmaster:9000/result0.txt;
第二例:求每个专业的最大的年龄人的相关信息:(数据还是上面的)
执行(在shell里面执行):
A = load '/opt/bigdata/ziliao/student.txt' using PigStorage(':') as (sno:chararray, sname:chararray, ssex:chararray, sage:int, sdept:chararray);
B=group A by sdept;
dump B;
max_age=foreach B generate group,MAX(A.sage);
dump=max_age;
输出结果:
(CA,20)
(CAT,22)
(CST,21)
查找目标信息
CA= filter A by sdept == 'CA' and sage == 20; (CA专业的最大年龄人的信息)
CAT0= filter A by sdept == 'CAT' and sage == 22; (不可用标识词)(CAT专业的最大年龄人的信息)
CST= filter A by sdept == 'CST' and sage == 21; (CST专业的最大年龄人的信息)