Apache Pig入門學習文檔(一)

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) 
本公衆號的內容是有關大數據技術和互聯網等方面內容的分享,也是一個舒適的技術互動交流的小家園,有什麼問題隨時均可以留言,歡迎你們來訪! 

3214000f-5633-3c17-a3d7-83ebda9aebff.jpg html

相關文章
相關標籤/搜索