[hadoop係列]Pig的安裝和簡單示例
inkfish原創,請勿商業性質轉載,轉載請注明來源(https://blog.csdn.net/inkfish )。(來源:https://blog.csdn.net/inkfish)
Pig是Yahoo!捐獻給Apache的一個項目,目前還在Apache孵化器(incubator)階段,目前版本是v0.5.0。Pig是一個基於Hadoop的大規模數據分析平台,它提供的SQL-like語言叫Pig Latin,該語言的編譯器會把類SQL的數據分析請求轉換為一係列經過優化處理的MapReduce運算。Pig為複雜的海量數據並行計算提供了一個簡易的操作和編程接口。本文介紹了Pig的安裝及簡單示例的運行,主要參考/翻譯自官方文檔的Pig Setup 。(來源:https://blog.csdn.net/inkfish)
前提條件: (來源:https://blog.csdn.net/inkfish)
- Linux/Unix係統,或帶有Cygwin的Windows操作係統,我是用的是Ubuntu 8.04;
- Hadoop 0.20.X
- JDK 1.6或更高
- Ant 1.7(可選,如果想自己編譯Pig的話則需要)
- JUnit 4.5(可選,如果自己想運行單元測試的話則需要)
Pig的安裝 (來源:https://blog.csdn.net/inkfish)
1.下載Pig
可以去Pig的官方主頁下載最新的Pig,在寫本篇文章時,最新版本是Pig 0.5.0
2.解壓縮
$ tar -xvf pig-0.5.0.tar.gz
我一般喜歡把pig裝在/opt/hadoop/pig-0.5.0目錄下
3.設置環境變量
為了便於Pig以後的升級,我創建了一個軟鏈接,環境變量指向軟鏈接的目錄,而軟鏈接指向最新的Pig版本。
$ ln -s /opt/hadoop/pig-0.5.0 /opt/hadoop/pig
編輯/etc/enviroment,在PATH加入Pig的bin子目錄路徑(也可以修改~/.bashrc或~/.profile)。
4.驗證安裝完成
重新進入終端,鍵入env命令,應該能看到PATH已經生效。鍵入pig -help命令,則出現幫助信息,代表Pig已經正確安裝完畢。(來源:https://blog.csdn.net/inkfish)
Pig的運行模式 (來源:https://blog.csdn.net/inkfish)
1.本地模式
Pig運行於本地模式,隻涉及到單獨的一台計算機。
2.MapReduce模式
Pig運行於MapReduce模式,需要能訪問一個Hadoop集群,並且需要裝上HDFS。
Pig的調用方式 (來源:https://blog.csdn.net/inkfish)
- Grunt shell方式:通過交互的方式,輸入命令執行任務;
- Pig script方式:通過script腳本的方式來運行任務;
- 嵌入式方式:嵌入java源代碼中,通過java調用來運行任務。
Pig的示例代碼 (來源:https://blog.csdn.net/inkfish)
下麵就分別介紹這三種不同的調用方式,首先,先展示一下示例需要用到的源代碼,這部分源代碼與官方文檔中的一樣,但有如下修改:
- 修正了官方文檔中一個錯誤,即id.pig最後一行id.out兩側的全角單引號改為半角單引號;
- 2.修正了官方文檔中一個錯誤,即idmapreduce.java的runIdQuery方法第一行末尾少一個分號;
- 3.按照Java常見的命名規範,類名首字母大寫。
script文件:id.pig(來源:https://blog.csdn.net/inkfish)
A = load 'passwd' using PigStorage(':'); B = foreach A generate $0 as id; dump B; store B into ‘id.out’;
local模式的java文件:Idlocal.java(來源:https://blog.csdn.net/inkfish)
import java.io.IOException; import org.apache.pig.PigServer; public class idlocal{ public static void main(String[] args) { try { PigServer pigServer = new PigServer("local"); runIdQuery(pigServer, "passwd"); } catch(Exception e) { } } public static void runIdQuery(PigServer pigServer, String inputFile) throws IOException { pigServer.registerQuery("A = load '" + inputFile + "' using PigStorage(':');"); pigServer.registerQuery("B = foreach A generate $0 as id;"); pigServer.store("B", "id.out"); } }
mapreduce模式的java文件:Idmapreduce.java(來源:https://blog.csdn.net/inkfish)
import java.io.IOException; import org.apache.pig.PigServer; public class idmapreduce{ public static void main(String[] args) { try { PigServer pigServer = new PigServer("mapreduce"); runIdQuery(pigServer, "passwd"); } catch(Exception e) { } } public static void runIdQuery(PigServer pigServer, String inputFile) throws IOException { pigServer.registerQuery("A = load '" + inputFile + "' using PigStorage(':');"); pigServer.registerQuery("B = foreach A generate $0 as id;"); pigServer.store("B", "idout"); } }
兩個java類需要進行編譯,編譯命令: javac -cp .:/opt/hadoop/pig/pig-0.5.0-core.jar Idlocal.java
javac -cp .:/opt/hadoop/pig/pig-0.5.0-core.jar Idmapreduce.java
其中pig-0.5.0-core.jar如不在當前目錄,則要指明其全路徑。(來源:https://blog.csdn.net/inkfish)
1.Grunt shell方式
Grunt shell方式首先用pig命令啟動,pig命令可以加參數“-x local”代表本地模式,或“-x mapreduce”代表mapreduce模式,默認mapreduce模式。 $ pig -x local
$ pig
$ pig -x mapreduce
按行輸入命令: grunt> A = load 'passwd' using PigStorage(':');
grunt> B = foreach A generate $0 as id;
grunt> dump B;
grunt> store B into 'out';
其中,“dump B”表示在屏幕中顯示結果,“store B into 'out'”表示把結果輸出到out文件/文件夾中。在local模式中,out文件寫入到當前目錄;mapreduce中,out文件夾則需要給出絕對路徑。
(來源:https://blog.csdn.net/inkfish)
2.Pig script方式
script方式中,用pig命令啟動,後麵帶要運行的.pig文件即可,如: $ pig -x local id.pig
$ pig id.pig
$ pig -x mapreduce id.pig
(來源:https://blog.csdn.net/inkfish)
3.嵌入式方式(來源:https://blog.csdn.net/inkfish)
嵌入式方式與運行於運行普通java類方式沒有任何不同,如: java -cp .:/opt/hadoop/pig/pig-0.5.0-core.jar Idmapreduce
(來源:https://blog.csdn.net/inkfish)
java -cp .:/opt/hadoop/pig/pig-0.5.0-core.jar Idlocal
最後更新:2017-04-02 04:01:45