Hadoop入門進(jìn)階課程7--Pig介紹、安裝與應(yīng)用案例
本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,博主為石山園,博客地址為 http://www.rzrgm.cn/shishanyuan 。該系列課程是應(yīng)邀實(shí)驗(yàn)樓整理編寫的,這里需要贊一下實(shí)驗(yàn)樓提供了學(xué)習(xí)的新方式,可以邊看博客邊上機(jī)實(shí)驗(yàn),課程地址為 https://www.shiyanlou.com/courses/237
【注】該系列所使用到安裝包、測試數(shù)據(jù)和代碼均可在百度網(wǎng)盤下載,具體地址為 http://pan.baidu.com/s/10PnDs,下載該PDF文件
1、搭建環(huán)境
部署節(jié)點(diǎn)操作系統(tǒng)為CentOS,防火墻和SElinux禁用,創(chuàng)建了一個(gè)shiyanlou用戶并在系統(tǒng)根目錄下創(chuàng)建/app目錄,用于存放Hadoop等組件運(yùn)行包。因?yàn)樵撃夸浻糜诎惭bhadoop等組件程序,用戶對shiyanlou必須賦予rwx權(quán)限(一般做法是root用戶在根目錄下創(chuàng)建/app目錄,并修改該目錄擁有者為shiyanlou(chown –R shiyanlou:shiyanlou /app)。
Hadoop搭建環(huán)境:
l 虛擬機(jī)操作系統(tǒng): CentOS6.6 64位,單核,1G內(nèi)存
l JDK:1.7.0_55 64位
l Hadoop:1.1.2
2、Pig介紹
Pig是yahoo捐獻(xiàn)給apache的一個(gè)項(xiàng)目,使用SQL-like語言,是在MapReduce上構(gòu)建的一種高級查詢語言,把一些運(yùn)算編譯進(jìn)MapReduce模型的Map和Reduce中。Pig 有兩種運(yùn)行模式: Local 模式和 MapReduce 模式
l 本地模式:Pig運(yùn)行于本地模式,只涉及到單獨(dú)的一臺計(jì)算機(jī)
l MapReduce模式:Pig運(yùn)行于MapReduce模式,需要能訪問一個(gè)Hadoop集群,并且需要裝上HDFS
Pig的調(diào)用方式:
l Grunt shell方式:通過交互的方式,輸入命令執(zhí)行任務(wù);
l Pig script方式:通過script腳本的方式來運(yùn)行任務(wù);
嵌入式方式:嵌入java源代碼中,通過java調(diào)用來運(yùn)行任務(wù)。
3、搭建Pig環(huán)境
3.1 下載并解壓安裝包
在Apache下載最新的Pig軟件包,點(diǎn)擊下載會(huì)推薦最快的鏡像站點(diǎn),以下為下載地址:http://mirror.bit.edu.cn/apache/pig/
也可以在/home/shiyanlou/install-pack目錄中找到該安裝包,解壓該安裝包并把該安裝包復(fù)制到/app目錄中
cd /home/shiyanlou/install-pack
tar -xzf pig-0.13.0.tar.gz
mv pig-0.13.0 /app
3.2 設(shè)置環(huán)境變量
使用如下命令編輯/etc/profile文件:
sudo vi /etc/profile
設(shè)置pig的class路徑和在path加入pig的路徑,其中PIG_CLASSPATH參數(shù)是設(shè)置pig在MapReduce工作模式:
export PIG_HOME=/app/pig-0.13.0
export PIG_CLASSPATH=/app/hadoop-1.1.2/conf
export PATH=$PATH:$PIG_HOME/bin
編譯配置文件/etc/profile,并確認(rèn)生效
source /etc/profile
echo $PATH
3.3 驗(yàn)證安裝完成
重新登錄終端,確保hadoop集群啟動(dòng),鍵入pig命令,應(yīng)該能看到pig連接到hadoop集群的信息并且進(jìn)入了grunt shell命令行模式:
4、測試?yán)?/span>
4.1 測試?yán)觾?nèi)容
在/home/shiyanlou/install-pack/class7中有website_log.zip測試數(shù)據(jù)文件,該文件是某網(wǎng)站訪問日志,請大家使用pig計(jì)算出每個(gè)ip的點(diǎn)擊次數(shù),例如 123.24.56.57 13 24.53.23.123 7 34.56.78.120 20 .... 等等
4.2 程序代碼
1 //加載HDFS中訪問日志,使用空格進(jìn)行分割,只加載ip列 2 records = LOAD 'hdfs://hadoop:9000/class7/input/website_log.txt' USING PigStorage(' ') AS (ip:chararray); 3 4 // 按照ip進(jìn)行分組,統(tǒng)計(jì)每個(gè)ip點(diǎn)擊數(shù) 5 records_b = GROUP records BY ip; 6 records_c = FOREACH records_b GENERATE group,COUNT(records) AS click; 7 8 // 按照點(diǎn)擊數(shù)排序,保留點(diǎn)擊數(shù)前10個(gè)的ip數(shù)據(jù) 9 records_d = ORDER records_c by click DESC; 10 top10 = LIMIT records_d 10; 11 12 // 把生成的數(shù)據(jù)保存到HDFS的class7目錄中 13 STORE top10 INTO 'hdfs://hadoop:9000/class7/out';
4.3 準(zhǔn)備數(shù)據(jù)
可以在/home/shiyanlou/install-pack/class7中找到本節(jié)使用的測試數(shù)據(jù)website_log.zip文件,使用unzip文件解壓縮,然后調(diào)用hadoop上傳本地文件命令把該文件傳到HDFS中的/class7目錄,如下圖所示:
cd /home/shiyanlou/install-pack/class7
unzip website_log.zip
ll
hadoop fs -mkdir /class7/input
hadoop fs -copyFromLocal website_log.txt /class7/input
hadoop fs -cat /class7/input/website_log.txt | less
4.4 實(shí)現(xiàn)過程
4.4.1 輸入代碼
進(jìn)入pig shell 命令行模式:
輸入代碼:
4.4.2 運(yùn)行過程
在執(zhí)行過程中在JobTracker頁面觀察運(yùn)行情況,鏈接地址為:http://**.***.**.***:50030/jobtracker.jsp
點(diǎn)擊查看具體作業(yè)信息
可以觀察到本次任務(wù)分為4個(gè)作業(yè),每個(gè)作業(yè)一次在上一次作業(yè)的結(jié)果上進(jìn)行計(jì)算
4.4.3 運(yùn)行結(jié)果
通過以下命令查看最后的結(jié)果:
hadoop fs -ls /class7/out
hadoop fs -cat /class7/out/part-r-00000

![clip_image002[4] clip_image002[4]](https://images0.cnblogs.com/blog/107289/201507/151248325018944.jpg)
![clip_image004[4] clip_image004[4]](https://images0.cnblogs.com/blog/107289/201507/151248365328012.jpg)
![clip_image006[4] clip_image006[4]](https://images0.cnblogs.com/blog/107289/201507/151248382043468.jpg)
![clip_image008[4] clip_image008[4]](https://images0.cnblogs.com/blog/107289/201507/151248393766010.jpg)
![clip_image010[4] clip_image010[4]](https://images0.cnblogs.com/blog/107289/201507/151248403606609.jpg)
![clip_image012[4] clip_image012[4]](https://images0.cnblogs.com/blog/107289/201507/151248445951850.jpg)
![clip_image014[4] clip_image014[4]](https://images0.cnblogs.com/blog/107289/201507/151248473131418.jpg)
![clip_image016[3] clip_image016[3]](https://images0.cnblogs.com/blog/107289/201507/151248522043058.jpg)
![clip_image018[3] clip_image018[3]](https://images0.cnblogs.com/blog/107289/201507/151248538292528.jpg)
![clip_image020[3] clip_image020[3]](https://images0.cnblogs.com/blog/107289/201507/151248591576867.jpg)
![clip_image022[3] clip_image022[3]](https://images0.cnblogs.com/blog/107289/201507/151249000957181.jpg)
![clip_image024[3] clip_image024[3]](https://images0.cnblogs.com/blog/107289/201507/151249015161479.jpg)
![clip_image026[3] clip_image026[3]](https://images0.cnblogs.com/blog/107289/201507/151249041732235.jpg)
浙公網(wǎng)安備 33010602011771號