標籤:
1,Pig的安裝
(一)軟體要求
(二)下載Pig
(三)編譯Pig
2,運行Pig
(一)Pig的所有執行模式
(二)pig的互動式模式
(三)使用pig指令碼執行模式
3,Pig Latin語句的聲明
(一)載入資料
(二)使用和處理資料
(三)儲存中間資料
(四)儲存最終資料
(五)調試Pig Latin語言
4,Pig的屬性值管理
5,Pig一些注意事項
1,Pig的安裝
(一)軟體安裝
必須配置:
(1)hadoop
:
http://hadoop.apache.org/common/releases.html
可以同時運行不同版本的Pig只要設定相對應的HADOOP_HOME即可,如果你沒有設定HADOOP_HOME,pig預設將會運行嵌入式的版本hadoop(1.0.0)
(2)Java1.6+
:
http://java.sun.com/javase/downloads/index.jsp
需要安裝JDK,並設定JAVA_HOME
可選配置:
python2.5 (如果使用python寫UDF時,需要安裝)
JavaScript1.7 (如果使用JavaScript寫UDF時,需要安裝)
JRuby1.6.7 (如果使用JRuby寫UDF時,需要安裝)
Groovy1.8.6 (如果使用Groovy寫UDF時,需要安裝 )
Ant1.7 (如果需要編譯構建,則需要下載安裝,搞JAV的,建議安裝)
Junit4.5 (如果需要單元測試,則需要安裝)
(二)下載Pig
注意以下幾點:
1,下載最近的而且是穩定版本的Apache Pig
2,然後解壓下載Pig,注意下面二點:
pig的主指令檔,pig位於bin目錄(/pig.n.n.n/bin/pig),這裡麵包括了pig的環境變數的定義
pig的屬性檔案,pig.properties位於conf目錄(/pig.n.n.n/conf/pig.properties)你也可以通過PIG_CONF_DIR環境變數來指定改檔案的絕對路徑。
3,配置pig的環境變數,如下面的代碼:
$ export PATH=/<my-path-to-pig>/pig-n.n.n/bin:$PATH
4,測試pig安裝時否成功,使用pig -help命令
(三):編譯Pig
1,從svn匯入pig的原始碼
svn co http://svn.apache.org/repos/asf/pig/trunk
2,進入pig的根目錄下,執行ant命令,編譯pig
3,校正pig.jar,運行一個單元測試ant test
2,運行Pig
在pig裡面,可以使用多種不同的模式運行它:
序號模式名是否支援本地模式Hadoop叢集模式
1互動式模式支援支援
2批處理模式支援支援
(一)執行模式:
pig有兩種運行模式或者運行類型:
本地模式:運行本地模式非常簡單,你只需要一台機器即可,所有的檔案和指令碼都在本地磁碟上,指定模式使用命令 pig -x flag (例如: pig -x local),本地模式下不支援MapReduce的(線程)並行,因為在當前的hadoop版本中,hadoop的LocalJobRunner 運行器不是一個安全執行緒的類。
hadoop叢集模式:hadoop叢集模式也稱Map Reduce模式,前提是你的機器上已經安裝好了hadoop的叢集,並能正常運行,叢集模式是pig預設的模式,在沒有任何聲明或指定的情況下,總是會以叢集的模式運行pig作業,當然你可以使用命令pig 或者 pig -x mapreduce來指定運行模式
例子:
以pig命令方式啟動:
(1):pig -x local (local模式)
(2)pig -x mapreduce (叢集模式)
以java命令啟動模式:
(1),java -cp pig.jar org.opache.pig.Main -x local (local模式)
(2),java -cp pig.jar org.opache.pig.Main -x mapreduce (叢集模式)
(二)互動式模式:
我們可以使用pig在一個互動模式下通過使用grunt shell,調用grunt shell,只需要執行pig命令即可,然後我們就會在命令列,操作pig,例子如下:
grunt> A = load ‘passwd‘ using PigStorage(‘:‘);
grunt> B = foreach A generate $0 as id;
grunt> dump B;
(三)指令碼模式
我們可以把pig的一系列處理,封裝成一個pig指令檔,尾碼名以.pig結尾,相信在linux下寫過shell指令碼的朋友都很好理解,我們把我們的linux命令封裝在.sh的指令碼裡,這樣執行起來非常方便,而且容易管理。
假如我們現在有一個test.pig的指令碼,那麼我們怎麼執行呢?
(1)以local模式運行: pig -x local id.pig
(2)以叢集模式運行: pig -x mapreduce.pig
使用Pig指令檔的好處:
我們可以將pig文法聲明和pig命令封裝在當個pig的指令檔裡,而且以尾碼名.pig結尾,非常有利於我們區分這些指令碼
我們可以在命令列和grunt shell裡面,使用run或exec命令,來運行pig,這裡散仙就不舉例子了,後面會寫文章。
pig指令碼也支援外部傳參數,這和shell指令碼的傳參類似,非常靈活,後面文章會寫。
pig的注釋:
(1)多行注釋:/*pig指令碼語句*/
(2)當行注釋:- - pig指令碼語句 兩個
注意:
Pig支援直接運行在HDFS上,Amazon S3,或者其他的一些分布式系統上的指令碼或一個jar包,如果是在分布式的系統上,我們在運行時,需要指定網路的url路徑,例如:
$ pig hdfs://nn.mydomain.com:9020/myscripts/script.pig
3,Pig Latin的語句聲明:
在pig中,pig latin是使用pig來處理資料的基本文法,這類似於我們在資料庫系統中使用SQL語句一樣。
我們使用pig latin語句,擷取一個輸入,然後經過一系列處理之後,會得到一個輸出,所以在所有的pig指令碼中,只有load(讀資料)和store(寫資料)兩個語句是必不可少的。
除此之外,Pig的文法塊可能還會包括,一些運算式和schema,Pig latin可以跨多行命令組成一個span,必須在小括弧的模式中,而且以必須以分號結束。 ( ; )
Pig latin語句,通常組織如下:
(一)一個load聲明從檔案系統上載入資料
(二)一系列的的轉化語句去處理資料
(三)一個dump語句,來展示結果或者stroe語句來儲存結果
只有Dump和Store語句能產生輸出
(一)載入資料:
使用load操作和(load/store)函數讀資料進入Pig(預設的儲存模式是PigStorage)
(二)使用和處理資料
Pig允許你使用多種方式處理資料,如果我們是剛入門的朋友,熟悉下面的這些操作符,將會有助於我們使用和理解Pig。
使用filter語句來過濾tuple或一行資料(類似於SQL中的where)
使用foreach語句來操作列的資料(類似於 select field1,filed 2 , .... from table裡面限制列返回。)
使用group語句來分組. (類似SQL裡面的group by)
使用cogroup, inner join,outer join來分組或關聯兩個以上的表關聯(與SQL裡的join類似)
?使用union語句來合并兩個以上關係的結果資料,使用split語句可以把一個表拆分為多個分散的小表(注意,散仙在這裡說表,只是為了方便理解,在pig沒有表這一個概念,雖然有類似的結構)
(三)儲存中間結果集
pig產生的中間結果集,會儲存在HDFS一個臨時的位置,這個位置必須已經在HDFS中存在,這個位置可以被配置使用pig.temp.dir這個屬性,預設是儲存在/tmp目錄,在0.7以前的版本,這個值是固定的,0.7以後,我們可以靈活的更改路徑,通過配置
(四)儲存最終結果集
使用store操作和load/store函數,可以將結果集寫入檔案系統中,預設的儲存格式是PigStorage,在我們測試階段,我們可以使用dump命令,直接將結果顯示在我們的螢幕上,方便我們調試,在一個生產環境中,我們一般使用store語句,來永久儲存我們的結果集。
(五)調試Pig Latin
pig提供了一寫操作符,來協助我們調試我們的結果:
?使用dump語句,顯示結果在我們的終端螢幕上
?使用describe語句,來顯示我們的schema的關係(類似查看錶的結構)
?使用explain語句,來顯示我們的執行邏輯或物理視圖,可以協助我們查看map,reduce的執行計畫
?使用illustrate語句,可以一步步的查看我們的語句執行步驟
此外,pig還定義了一些非常方面的別名集,來快速協助我們調試指令碼:
?dump的別名 \d
?describe的別名 \de
?explain的別名 \e
?illustrate的別名 \i
?退出\q
4,Pig的屬性值
Pig支援java中的properties檔案,我們可以通過使用這個檔案來定製pig的行為,我們可以使用help命令,來查看所有的pig的屬性值
如何指定一個pig的值?
?通過pig.properties檔案,注意需要把這個檔案包含在java的classpath中
?-D 命令在命令列指定一個pig屬性 例如:pig -Dpig.tmpfilecompression=true
?-P命令可以指定自己的一個properties檔案。 例如:pig -P mypig.properties
?set命令,例如:set pig.exec.nocombiner true
注意:properties檔案,使用標準的Java的properties檔案格式
地方他們的優先順序如下:
pig.properties < -D Pig property < -P properties file < set comman
指定hadoop的檔案配置屬性與Pig是一樣的。
Hadoop和pig的所有屬性值,最後都會在pig裡統一收集起來,它是有效對於任何UDF
例如UDFContext對象,為了訪問這些屬性,我們可以調用getJobConf方法
4,Pig一些注意事項
1.確保你的JDK安裝完畢
2.確保的你的pig的bin目錄執行指令碼環境變數已經安裝
export PATH=/<my-path-to-pig>/pig-0.9.0/bin:$PATH
3.確保你的PIG_HOME環境變數是有效
export PIG_HOME=/<my-path-to-pig>/pig-0.9.0
4.配置ant指令碼,編譯pig的文檔
5.配置PIG_CLASSPATH,指定叢集所需的所有的設定檔,包括hadoop的core-site.xml,hdfs-site.xml和mapred-site.xml
6.掌握pig的一些基本UDF函數
?ExtractHour,提取小時從每行資料中
?NGramGenerator,產生n-garms的words
?NonURLDetector,移除一個空的列,或者值是url的資料
?ScoreGenerator,計算n-garm的分數
?ToLower,轉小寫
?TutorialUtil,分割查詢字串組成一個words
上面的這些UDF是一些比較典型的例子,散仙建議初學者可以先看一看,看不懂也無所謂,UDF使用的幾率也不是特別大,最重要的還是基礎文法的使用,關於配置環境的安裝,如果你用的是原生的Apache Hadoop,則按照上面的步驟來,是非常有效,因為這個文檔,就是參照apache官方的文檔翻譯的,英文好的,可以直接點擊這個連結http://pig.apache.org/docs/r0.12.0/start.html,如果是其他的版本的hadoop,比如CDH或者HDP,你可能使用CM(Cloudera Manager)或者AM(Ambari)來安裝,這樣就省去自己安裝的過程,你可以直接使用Pig來處理資料了,不過,初學者還是建議自己動手摺騰一下,後期熟練了,可以用些管理工具,來自動安裝,這樣能學的更深入些,看完後,有問題的歡迎指正,或者到群公眾號留言。
如果有什麼疑問,歡迎掃碼關注公眾號:我是攻城師(woshigcs)
本公眾號的內容是有關大資料技術和互連網等方面內容的分享,也是一個溫馨的技術互動交流的小家園,有什麼問題隨時都可以留言,歡迎大家來訪!
Apache Pig入門學習文檔(一)