[Hadoop]轉載-Pig的簡單介紹

大搜車-自娛發表於2012-07-20
Pig是Yahoo!捐獻給Apache的一個專案,目前還在Apache孵化器(incubator)階段,目前版本是v0.5.0。Pig是一個基於Hadoop的大規模資料分析平臺,它提供的SQL-like語言叫Pig Latin,該語言的編譯器會把類SQL的資料分析請求轉換為一系列經過優化處理的MapReduce運算。Pig為複雜的海量資料平行計算提供了一個簡易的操作和程式設計介面。本文介紹了Pig的安裝及簡單示例的執行,主要參考/翻譯自官方文件的Pig Setup 。

前提條件:

Linux/Unix系統,或帶有Cygwin的Windows作業系統,我是用的是Ubuntu 8.04;
Hadoop 0.20.X
JDK 1.6或更高
Ant 1.7(可選,如果想自己編譯Pig的話則需要)
JUnit 4.5(可選,如果自己想執行單元測試的話則需要)
Pig的安裝

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已經正確安裝完畢。

Pig的執行模式

1.本地模式
  Pig執行於本地模式,只涉及到單獨的一臺計算機。
2.MapReduce模式
  Pig執行於MapReduce模式,需要能訪問一個Hadoop叢集,並且需要裝上HDFS。

Pig的呼叫方式

Grunt shell方式:通過互動的方式,輸入命令執行任務;
Pig script方式:通過script指令碼的方式來執行任務;
嵌入式方式:嵌入java原始碼中,通過java呼叫來執行任務。
Pig的示例程式碼

  下面就分別介紹這三種不同的呼叫方式,首先,先展示一下示例需要用到的原始碼,這部分原始碼與官方文件中的一樣,但有如下修改:

修正了官方文件中一個錯誤,即id.pig最後一行id.out兩側的全形單引號改為半形單引號;
2.修正了官方文件中一個錯誤,即idmapreduce.java的runIdQuery方法第一行末尾少一個分號;
3.按照Java常見的命名規範,類名首字母大寫。
  script檔案:id.pig

view plaincopy
A = load 'passwd' using PigStorage(':');
B = foreach A generate $0 as id;
dump B;
store B into ‘id.out’;


  local模式的java檔案:Idlocal.java

view plaincopy
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

view plaincopy
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如不在當前目錄,則要指明其全路徑。

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資料夾則需要給出絕對路徑。

2.Pig script方式
  script方式中,用pig命令啟動,後面帶要執行的.pig檔案即可,如:
    $ pig -x local id.pig
    $ pig id.pig
    $ pig -x mapreduce id.pig

3.嵌入式方式

  嵌入式方式與執行於執行普通java類方式沒有任何不同,如:
    java -cp .:/opt/hadoop/pig/pig-0.5.0-core.jar Idmapreduce
    java -cp .:/opt/hadoop/pig/pig-0.5.0-core.jar Idlocal

文章出處:http://blog.csdn.net/inkfish/article/details/5205999

相關文章