hadoop之pig安装及简单实例(四)

一 简介

如果掉书袋的话大概是这样:
Apache Pig是用来处理大规模数据的高级查询语言,配合Hadoop使用,可以在处理海量数据时达到事半功倍的效果,比使用Java,C++等语言编写大规模数据处理程序的难度要小N倍,实现同样的效果的代码量也小N倍。Apache Pig为大数据集的处理提供了更高层次的抽象,为mapreduce算法(框架)实现了一套类SQL的数据处理脚本语言的shell脚本,在Pig中称之为Pig Latin,在这套脚本中我们可以对加载出来的数据进行排序、过滤、求和、分组(group by)、关联(Joining),Pig也可以由用户自定义一些函数对数据集进行操作,也就是传说中的UDF(user-defined functions)。

如果让我说的话,就是运行在hadoop上的sql,当然虽然它们形式差不多,但是实际上 Pig Latin是面向数据流的编程方式,而SQL是一种描述型编程语言。

二 安装

1.前往http://mirror.bit.edu.cn/apache/pig/下载相应的pig版本,然后解压:

tar -zvxf pig-0.16.0-tar.gz    

2.解压完之后设置环境变量:

vim /etc/profile  
export PIG_HOME=/lighttrace/pig-0.13.0   (替换成你的目录)  
export PATH=$PATH:$PIG_HOME/bin:$PIG_HOME/conf  
export PIG_CLASSPATH=$HADOOP_HOME/etc/hadoop

3.同样的

source /etc/profile 

使其立马生效

4.然后验证

pig --help

看到相应的版本信息表示安装就成功了

二 pig执行模式

一 pig local模式
其运行在单一的JVM中,可访问本地文件。该模式适用于处理小规模数据或学习之用。

二 MapReduce模式
在该模式下,Pig将查询转换为MapReduce作业提交给Hadoop(可以说群集 ,也可以说伪分布式)。
应该检查当前Pig版本是否支持你当前所用的Hadoop版本。某一版本的Pig仅支持特定版本的Hadoop,你可以通过访问Pig官网获取版本支持信息。

Pig会用到HADOOP_HOME环境变量。如果该变量没有设置,Pig也可以利用自带的Hadoop库,但是这样就无法保证其自带肯定库和你实际使用的HADOOP版本是否兼容,所以建议显式设置HADOOP_HOME变量。所以最后我们还设置了如下变量:
export PIG_CLASSPATH=$HADOOP_HOME/etc/hadoop

三 运行Pig程序

Pig程序执行方式有三种:
1) 脚本方式
直接运行包含Pig脚本的文件,比如以下命令将运行本地scripts.pig文件中的所有命令:
pig scripts.pig

2) Grunt方式
Grunt提供了交互式运行环境,可以在命令行编辑执行命令。
Grund同时支持命令的历史记录,通过上下方向键访问。
Grund支持命令的自动补全功能。比如当你输入a = foreach b g时,按下Tab键,则命令行自动变成a = foreach b generate。你甚至可以自定义命令自动补全功能的详细方式。具体请参阅相关文档。

3) 嵌入式方式
可以在java中运行Pig程序,类似于使用JDBC运行SQL程序。
Pig Latin编辑器
PigPen是一个Ecliipse插件,它提供了在Eclipse中开发运行Pig程序的常用功能,比如脚本编辑、运行等。下载地址:http://wiki.apache.org/pig/PigPen
其他一些编辑器也提供了编辑Pig脚本的功能,比如vim等。

四 简单实例

有一个文件ip_log.txt是某网站访问日志,使用pig计算出每个ip的点击次数,文件内容如下:

119.146.220.12 - - [31/Jan/2012:23:59:48 +0800] “GET /popwin_js.php?fid=53 HTTP/1.1”
404 289 “http://f.dataguru.cn/forum.php?mod=forumdisplay&fid=53&page=1” “Mozilla/5.0
(Windows NT 5.1; rv:8.0.1) Gecko/20100101 Firefox/8.0.1”
119.146.220.12 - - [31/Jan/2012:23:59:49 +0800] “GET /static/js/seditor.js?AZH HTTP/1
.1” 304 - “http://f.dataguru.cn/forum.php?mod=forumdisplay&fid=53&page=1” “Mozilla/5.
0 (Windows NT 5.1; rv:8.0.1) Gecko/20100101 Firefox/8.0.1”
119.146.220.12 - - [31/Jan/2012:23:59:49 +0800] “GET /home.php?mod=spacecp&ac=pm&op=c
hecknewpm&rand=1328025588 HTTP/1.1” 200 - “http://f.dataguru.cn/forum.php?mod=forumdi
splay&fid=53&page=1” “Mozilla/5.0 (Windows NT 5.1; rv:8.0.1) Gecko/20100101 Firefox/8
.0.1”
107.146.250.12 - - [31/Jan/2012:23:59:55 +0800] “GET /static/js/smilies.js?AZH HTTP/1.1” 304 - “http://f.dataguru.cn/forum.php?mod=forumdisplay&fid=53&page=1” “Mozilla/5.
0 (Windows NT 5.1; rv:8.0.1) Gecko/20100101 Firefox/8.0.1”
119.146.220.12 - - [31/Jan/2012:23:59:48 +0800] “GET /data/cache/style_2_common.css?A
ZH HTTP/1.1” 304 - “http://f.dataguru.cn/forum.php?mod=forumdisplay&fid=53&page=1” “M
ozilla/5.0 (Windows NT 5.1; rv:8.0.1) Gecko/20100101 Firefox/8.0.1”
119.146.220.12 - - [31/Jan/2012:23:59:51 +0800] “GET /static/js/jquery-1.6.js HTTP/1.1” 404 299 “http://f.dataguru.cn/forum.php?mod=forumdisplay&fid=53&page=1” “Mozilla/5
.0 (Windows NT 5.1; rv:8.0.1) Gecko/20100101 Firefox/8.0.1”
108.146.220.12 - - [31/Jan/2012:23:59:55 +0800] “GET /static/js/smilies.js?AZH HTTP/1.1” 304 - “http://f.dataguru.cn/forum.php?mod=forumdisplay&fid=53&page=1” “Mozilla/5.
0 (Windows NT 5.1; rv:8.0.1) Gecko/20100101 Firefox/8.0.1”
119.146.220.12 - - [31/Jan/2012:23:59:52 +0800] “GET /static/js/floating-jf.js HTTP/1.1” 404 300 “http://f.dataguru.cn/forum.php?mod=forumdisplay&fid=53&page=1” “Mozilla/
5.0 (Windows NT 5.1; rv:8.0.1) Gecko/20100101 Firefox/8.0.1”
119.146.220.12 - - [31/Jan/2012:23:59:55 +0800] “GET /popwin_js.php?fid=53 HTTP/1.1”404 289 “http://f.dataguru.cn/forum.php?mod=forumdisplay&fid=53&page=1” “Mozilla/5.0
(Windows NT 5.1; rv:8.0.1) Gecko/20100101 Firefox/8.0.1”
119.146.220.12 - - [31/Jan/2012:23:59:55 +0800] “GET /static/js/smilies.js?AZH HTTP/1.1” 304 - “http://f.dataguru.cn/forum.php?mod=forumdisplay&fid=53&page=1” “Mozilla/5.
0 (Windows NT 5.1; rv:8.0.1) Gecko/20100101 Firefox/8.0.1”
108.146.220.12 - - [31/Jan/2012:23:59:55 +0800] “GET /static/js/smilies.js?AZH HTTP/1.1” 304 - “http://f.dataguru.cn/forum.php?mod=forumdisplay&fid=53&page=1” “Mozilla/5.
0 (Windows NT 5.1; rv:8.0.1) Gecko/20100101 Firefox/8.0.1”

复制该文件记得将一条记录方成完整的一行,不然会统计多余的数据,虽然不影响结果
1.首先将该文件上传到hdfs里面

hadoop fs -put ip_log.txt /user/root/pig

2.查看文件是否上传成功

hadoop fs -ls /user/root/pig

3.grunt模式运行命令:

//加载HDFS中访问日志,使用空格进行分割,只加载ip列
records = LOAD '/user/root/pig/ip_log.txt' USING PigStorage(' ') AS (ip:chararray);

// 按照ip进行分组,统计每个ip点击数
records_b = GROUP records BY ip;
records_c = FOREACH records_b GENERATE group,COUNT(records) AS click;

// 按照点击数排序,保留点击数前3个的ip数据
records_d = ORDER records_c by click DESC;
top10 = LIMIT records_d 3;

// 把生成的数据保存到HDFS的class7目录中
STORE top10 INTO '/user/root/pigout';

运行完最后一行命令开始计算,成功如下:
hadoop之pig安装及简单实例(四)_第1张图片

查看运行后的结果:

hadoop fs -ls /user/root/pigout
hadoop fs -cat /user/root/pigout/part-r-00000

到此,一个基于hadoop的pig例子就完成了。

你可能感兴趣的:(hadoop)