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專業的最大年齡人的信息)

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM