pig安装配置及实例

一、前提

  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]$ ls
docs          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.10
hadoop-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.0
export 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:CST
201000102:Wangli:women:19:CST
201000103:Xiangming:women:18:CAT
201000104:Lixiao:men:19:CST
201000105:Wuda:women:19:CA
201000106:Huake:men:21:CST
201000107:Beihang:men:20:CA
201000108:Bob:women:17:CAT
201000109:Smith:men:19:CAT
201000110:Gxl:men:19:CST
201000111:Songwei:women:19:CA
201000112:Weihua:men:21:CAT
201000113:Weilei:women:18:CA
201000114:Luozheng:men:19:CA
201000115:Shangsi:women:20:CAT
201000116:Fandong:men:19:CST
201000117:Laosh:women:22:CAT
201000118: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 /in
hdfs://wangmaster:9000/docs<r 3>    104
hdfs://wangmaster:9000/hbase    <dir>
hdfs://wangmaster:9000/input    <dir>
hdfs://wangmaster:9000/output    <dir>
hdfs://wangmaster:9000/student.txt<r 3>    525
hdfs://wangmaster:9000/tmp    <dir>
hdfs://wangmaster:9000/wang    <dir>

    然后对其进行操作

    输入目录变为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专业的最大年龄人的信息)

 

 

 

posted @ 2018-05-28 11:33  月夜白狐  阅读(3232)  评论(0编辑  收藏  举报