閱讀302 返回首頁    go 阿裏雲 go 技術社區[雲棲]


[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
    java -cp .:/opt/hadoop/pig/pig-0.5.0-core.jar Idlocal
(來源:https://blog.csdn.net/inkfish)

 

最後更新:2017-04-02 04:01:45

  上一篇:go magento -- 開發必備插件三
  下一篇:go magento -- 開發必備插件二