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 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章