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入門學習文檔(一)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.