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