Hadoop Pig简介、安装、试用

时间:2014-06-05 20:08:13   收藏:0   阅读:373

相比Java的MapReduce api,Pig为大型数据集的处理提供了更高层次的抽象,与MapReduce相比,Pig提供了更丰富的数据结构,一般都是多值和嵌套的数据结构。Pig还提供了一套更强大的数据变换操作,包括在MapReduce中被忽视的连接Join操作。

 Hadoop版本:2.2.0

 Pig版本:0.12.1

 

Pig介绍

Pig包括两部分:

 Pig内部,每个操作或变换是对输入进行数据处理,然后产生输出结果,这些变换操作被转换成一系列MapReduce作业,Pig让程序员不需要知道这些转换具体是如何进行的,这样工程师可以将精力集中在数据上,而非执行的细节上。

 

安装Pig

好,作为一切的开始,我们先安装一个Pig环境。

从http://hadoop.apache.org/pig/releases.html下载稳定版本,当前稳定版本是0.12.1,然后解压到任意目录,并且修改环境变量

tar xzf pig-0.12.1.tar.gz

export PIG_INSTALL=/root/pig/pig-0.12.1
export PATH=$PATH:$PIG_INSTALL/bin

 

本地模式

Grunt是Pig的外壳程序(shell)。本地模式下,Pig运行在单个JVM中,访问本地文件系统,该模式用于测试或处理小规模数据集

[root@hadoop-namenodenew pig]# pig -x local
grunt>

 

MapReduce模式

在MapReduce模式下,Pig将查询翻译为MapReduce作业,然后在Hadoop集群上执行。Pig版本和Hadoop版本间,有要求,笔者这边的版本如下

Hadoop 2.2.0
Pig 0.12.1

注意:Pig 0.12.1默认是被编译成与Hadoop的旧版本的,所以这边需要重新编译下Pig,运行如下命令,编译时间比较长,耐心等待。参考时间:16min

ant clean jar-all -Dhadoopversion=23

否则运行Pig任务时,会有如下错误:

 Hadoop: java.lang.IncompatibleClassChangeError: Found interface org.apache.hadoop.mapreduce.JobContext, but class was expected

然后,Pig是放在Hadoop集群上的,所以设置下HADOOP_HOME等环境变量

export HADOOP_HOME=/root/hadoop/hadoop-2.2.0
export PATH=$PATH:/root/hadoop/hadoop-2.2.0/bin

运行Pig的MapReduce模式,命令如下:

pig
或者:pig -x mapreduce

 

运行Pig程序示例

运行一个简单的示例,就是把linux下的/etc/passwd文件的第一列提取出来输出,用MapReduce模式跑,效果就是输入所有用户名

首先把/etc/passwd文件put到hadoop的hdfs上,命令如下

hadoop fs -put /etc/passwd /user/root/passwd

然后进入Pig shell,运行命令,以‘:‘分隔提取A,然后把A的第一列放入B,dump打出B

[root@hadoop-namenodenew]# pig
grunt> A = load passwd using PigStorage(:);
grunt> B = foreach A generate $0 as id;        
grunt> dump B;

输出如下:

bubuko.com,布布扣
(省略几万字....)
Input(s):
Successfully read 29 records (1748 bytes) from: "hdfs://192.168.12.67:8020/user/root/passwd"

Output(s):
Successfully stored 29 records (325 bytes) in: "hdfs://192.168.12.67:8020/tmp/temp1558767875/tmp-1327634226"

Counters:
Total records written : 29
Total bytes written : 325
Spillable Memory Manager spill count : 0
Total bags proactively spilled: 0
Total records proactively spilled: 0

Job DAG:
job_1401631066126_0005

(省略几万字....)

(root)
(bin)
(daemon)
(adm)
(lp)
(sync)
(shutdown)
(halt)
(mail)
(uucp)
(operator)
(games)
(gopher)
(ftp)
(nobody)
(dbus)
(vcsa)
(rpc)
(abrt)
(rpcuser)
(nfsnobody)
(haldaemon)
(ntp)
(saslauth)
(postfix)
(sshd)
(tcpdump)
(oprofile)
(riak)
bubuko.com,布布扣

 

Pig适用场景

Pig并不适合所有的数据处理任务,和MapReduce一样,它是为数据批处理而设计的,如果想执行的查询只涉及一个大型数据集的一小部分数据,Pig的实现不会很好,因为它要扫描整个数据集或其中很大一部分。

随着新版本发布,Pig的表现和原生MapRedece程序差距越来越小,因为Pig的开发团队使用了复杂、精巧的算法来实现Pig的关系操作。除非你愿意花大量时间来优化Java MapReduce程序,否则使用Pig Latin来编写查询的确能帮你节约时间。

 

附录:

执行Pig程序的方法

 Pig与RDBMS、Hive比较

 后记

 

参考:

http://pig.apache.org/docs/r0.12.1/start.html

http://stackoverflow.com/questions/21300612/error-in-pig-while-loading-data

https://wiki.apache.org/pig/EmbeddedPig

《Hadoop权威指南》

Hadoop Pig简介、安装、试用,布布扣,bubuko.com

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!