Hadoop:pig 安装及入门示例
pig是hadoop的一個(gè)子項(xiàng)目,用于簡(jiǎn)化MapReduce的開(kāi)發(fā)工作,可以用更人性化的腳本方式分析數(shù)據(jù)。
一、安裝
a) 下載
從官網(wǎng)http://pig.apache.org下載最新版本(目前是0.14.0版本),最新版本可以兼容hadop 0.x /1.x / 2.x版本,直接解壓到某個(gè)目錄即可。
注:下面是幾個(gè)國(guó)內(nèi)的鏡像站點(diǎn)
http://mirrors.cnnic.cn/apache/pig/
http://mirror.bit.edu.cn/apache/pig/
http://mirrors.hust.edu.cn/apache/pig/
本文的解壓目錄是:/Users/jimmy/app/pig-0.14.0
b) 環(huán)境變量
export PIG_HOME=/Users/jimmy/app/pig-0.14.0export HADOOP_HOME=/Users/jimmy/app/hadoop-2.6.0export PIG_CLASSPATH=${HADOOP_HOME}/etc/hadoop/export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop...export PATH=${PIG_HOME}/bin:$PATH至少要配置上面這幾項(xiàng),其它項(xiàng)比如JAVA_HOME就不必多說(shuō)了,肯定也是要的。
c) 啟動(dòng)
$PIG_HOME/bin/pig
如果能正常進(jìn)入grunt > 提示符就表示ok了
?
二、基本HDFS操作
pig的好處之一是簡(jiǎn)化了HDFS的操作,沒(méi)有pig之前要查看一個(gè)hdfs的文件,必須$HADOOP_HOME/bin/hdfs dfs -ls /input 打一堆命令,而在pig shell交互模式下,只需要
ls /input 即可
?
查看hdfs文件內(nèi)容
cat /input/duplicate.txt
跟在linux下操作完全一樣,其它命令留著大家自己去研究吧,不熟悉的可以用help查看幫助
?
三、基本的數(shù)據(jù)分析
在前面的文章?Hadoop: MapReduce2的幾個(gè)基本示例?中,我們用JAVA編程的方式演示了幾個(gè)基本例子,現(xiàn)在拿pig來(lái)實(shí)現(xiàn)一把作為對(duì)比:
a) 求Count
grunt> a = LOAD '/input/duplicate.txt' AS (value:int);
先將輸入文件加載到a中,由于輸入文件每行只有一個(gè)數(shù)字,最后的AS部分表示創(chuàng)建了一個(gè)列,名稱為value,為整型,其值就是這個(gè)數(shù)字的值。
可以用describle a; 查看結(jié)構(gòu),如果要看具體值,可以用dump a;
?
grunt> b = GROUP a all;
對(duì)a進(jìn)行分組,這里由于沒(méi)有指定分組條件,所以相當(dāng)每一行都是分組組件,這一條命令的主要作用是實(shí)現(xiàn)行轉(zhuǎn)列,執(zhí)行完以后,可以查下b的結(jié)構(gòu)和值:
?
grunt> c = FOREACH b GENERATE COUNT(a.value);
由于b只有一行了,所以上面的語(yǔ)句其實(shí)就是求該所有a.value列的個(gè)數(shù),即輸入文件的總數(shù)。
原來(lái)用MapReduce要寫一坨java代碼的工作,現(xiàn)在用PIG只要3條命令就搞定了。
?
b) 求最大值(MAX)
grunt> c = FOREACH b GENERATE MAX(a.value);
?
c) 求平均值(AVG)
grunt> c = FOREACH b GENERATE AVG(a.value);
?
d) 求和(SUM)
grunt> c = FOREACH b GENERATE SUM(a.value);
?
e) 去重復(fù)(DISTINCT)
DISTINCT的思路跟前面略有不同,關(guān)鍵在于如何分組,見(jiàn)下面的命令:
grunt> b = GROUP a by value;?
對(duì)a分組,分組依據(jù)為value值,這樣重復(fù)的值就歸到一組了,可以用dump b;看下結(jié)果:
剩下的事情就好辦了,把b的第一列取出來(lái)即可
grunt> c = FOREACH b GENERATE group;
處理完成,用dump c;查看結(jié)果
當(dāng)然,對(duì)本例而言,還有一種更簡(jiǎn)單的去重方法:
grunt> b = DISTINCT a;
?
f) WordCount
已經(jīng)有人研究過(guò)了,就直接拿來(lái)用吧,見(jiàn):http://blog.itpub.net/26495863/viewspace-1348121/
grunt> a = LOAD '/input/immortals.txt' as (line:chararray); //加載輸入文件,并按行分隔
grunt> words = FOREACH a GENERATE flatten(TOKENIZE(line)) as w; //將每行分割成單詞
grunt> g = GROUP words by w; //按單詞分組
grunt> wordcount = FOREACH g GENERATE group,COUNT(words);? //單詞記數(shù)
輸出結(jié)果 dump wordcount;
(I,4) (Of,1) (am,1) (be,3) (do,2) (in,1) (it,1) (of,1) (to,1) (we,3) (But,1) (all,1) (are,2) (bad,1) (but,1) (dog,1) (not,1) (say,1) (the,4) (way,1) (They,1) (best,1) (have,1) (what,1) (will,2) (your,1) (fever,1) (flame,1) (guard,1) (dreams,1) (eternal,1) (watcher,1) (behavior,1)?
g) wordcount2(帶詞頻倒排序)
在剛才的示例上修改一下:
a = LOAD '/input/immortals.txt' as (line:chararray);
words = FOREACH a GENERATE flatten(TOKENIZE(line)) as w;
g = GROUP words by w;
前面這幾行都不用改
wordcount = FOREACH g GENERATE group,COUNT(words) as count;//給單詞數(shù)所在列加一個(gè)別名count
r = foreach wordcount generate count,group;//將結(jié)果列交換,將變成{count,word}這種結(jié)構(gòu)
g2 = group r by count;//按count分組
(1,{(1,behavior),(1,watcher),(1,eternal),(1,dreams),(1,guard),(1,flame),(1,fever),(1,your),(1,what),(1,have),(1,best),(1,They),(1,way),(1,say),(1,not),(1,dog),(1,but),(1,bad),(1,all),(1,But),(1,to),(1,of),(1,it),(1,in),(1,am),(1,Of)}) (2,{(2,will),(2,are),(2,do)}) (3,{(3,we),(3,be)}) (4,{(4,I),(4,the)})x = foreach g2 generate group,r.group;//去掉無(wú)用的列
(1,{(behavior),(watcher),(eternal),(dreams),(guard),(flame),(fever),(your),(what),(have),(best),(They),(way),(say),(not),(dog),(but),(bad),(all),(But),(to),(of),(it),(in),(am),(Of)}) (2,{(will),(are),(do)}) (3,{(we),(be)}) (4,{(I),(the)})y = order x by group desc;//按count倒排
(4,{(I),(the)}) (3,{(we),(be)}) (2,{(will),(are),(do)}) (1,{(behavior),(watcher),(eternal),(dreams),(guard),(flame),(fever),(your),(what),(have),(best),(They),(way),(say),(not),(dog),(but),(bad),(all),(But),(to),(of),(it),(in),(am),(Of)})最后給二個(gè)網(wǎng)友整理的pig用法文章地址:
hadoop pig 入門總結(jié) http://blackproof.iteye.com/blog/1791980
pig中各種sql語(yǔ)句的實(shí)現(xiàn) http://www.open-open.com/lib/view/open1385173281604.html
總結(jié)
以上是生活随笔為你收集整理的Hadoop:pig 安装及入门示例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 关于cknife与burpsuite对j
- 下一篇: 黑科技 | 电脑必备黑科技软件