一、pig的運行模式:
Pig 有兩種運行模式: Local 模式和 MapReduce 模式。當 Pig 在 Local 模式運行的時候, Pig 將只訪問本地一台主機;當 Pig 在 MapReduce 模式運行的時候, Pig 將訪問一個 Hadoop 集群和 HDFS 的安裝位置。這時, Pig 將自動地對這個集群進行分配和回收。因為 Pig 系統可以自動地對 MapReduce 程序進行優化,所以當用戶使用 Pig Latin 語言進行編程的時候,不必關心程序運行的效率, Pig 系統將會自動地對程序進行優化。這樣能夠大量節省用戶編程的時間。
測試示例如下:
本地模式:pig -x local test.pig 偽分布式模式下使用
MapReduce模式:pig test.pig(或者pig -x mapreduce test.pig,pig test.pig為其簡寫形式) 全分布式下使用
二、pig運行方式:
Pig 的 Local 模式和 MapReduce 模式都有三種運行方式,分別為: Grunt Shell 方式、腳本文件方式和嵌入式程序方式。下面我們將對其進行一一介紹。
1.Local 模式:
( 1 ) Grunt Shell 方式
用戶使用 Grunt Shell 方式時,需要首先使用命令開啟 Pig 的 Grunt Shell ,只需在 Linux 終端中輸入如下命令並執行即可:
$pig –x local
這樣 Pig 將進入 Grunt Shell 的 Local 模式,如果直接輸入“ $pig ”命令, Pig 將首先檢測 Pig 的環境變量設置,然后進入相應的模式。如果沒有設置 MapReduce 環
境變量, Pig 將直接進入 Local 模式。
Grunt Shell 和 Windows 中的 Dos 窗口非常類似,這里用戶可以一條一條地輸入命令對數據進行操作。
( 2 ) 腳本文件方式
使用腳本文件作為批處理作業來運行 Pig 命令,它實際上就是第一種運行方式中命令的集合,使用如下命令可以在本地模式下運行 Pig 腳本:
$pig –x local script.pig
其中,“ script.pig ”是對應的 Pig 腳本,用戶在這里需要正確指定 Pig 腳本的位置,否則,系統將不能識別。例如, Pig 腳本放在“ /root/pigTmp ”目錄下,那
么這里就要寫成“ /root/pigTmp/script.pig ”。用戶在使用的時候需要注意 Pig 給出的一些提示,充分利用這些能夠幫助用戶更好地使用 Pig 進行相關的操作 。
( 3 ) 嵌入式程序方式
我們可以把 Pig 命令嵌入到主機語言中,並且運行這個嵌入式程序。和運行普通的 Java 程序相同,這里需要書寫特定的 Java 程序,並且將其編譯生成對應的 class 文
件或 package 包,然后再調用 main 函數運行程序。用戶可以使用下面的命令對 Java 源文件進行編譯:
$javac -cp pig-*.*.*-core.jar local.java
這里“ pig-*.*.*-core.jar ”放在 Pig 安裝目錄下,“ local.java ”為用戶編寫的 java 源文件,並且“ pig-*.*.*-core.jar ”和“ local.java ”需要用戶正確地指定相應的 位置。例如,我們的“ pig-*.*.*-core.jar ”文件放在“ /root/hadoop-0.20.2/ ”目錄下,“ local.java ”文件放在“ /root/pigTmp ”目錄下,所以這一條命令我們應 該寫成:$javac -cp /root/hadoop-0.20.2/ pig- 0 . 20 . 2 -core.jar /root/pigTmp/ local.java當編譯完成后, Java 會生成“ local.class ”文件,然后用戶可以通過 如下命令調用執行此文件。
$ java -cp pig-*.*.*-core.jar:. Local
2.MapReduce 模式
(1 ) Grunt Shell 方式
用戶在 Linux 終端下輸入如下命令進入 Grunt Shell 的 MapReduce 模式:
$pig –x mapreduce
( 2 ) 腳本文件方式
用戶可以使用如下命令在 MapReduce 模式下運行 Pig 腳本文件。
$pig –x mapreduce script.pig
(3 ) 嵌入式程序
和 Local 模式相同,在 MapReduce 模式下運行嵌入式程序同樣需要經過編譯和執行兩個步驟。用戶可以使用如下兩條命令,完成相應的操作。
javac -cp pig-0.7.0-core.jar mapreduce.java
java -cp pig-0.7.0-core.jar:. mapreduce