Hadoop之Pig

Pig是一種探索大規(guī)模數據集的腳本語言。MapReducer的一個主要的缺點就是開發(fā)的周期太長了。我們要編寫mapper和reducer,然后對代碼進行編譯打出jar包,提交到本地的JVM或者是hadoop的集群上,最后獲取結果,這個周期是非常耗時的,即使使用Streaming(它是hadoop的一個工具,用來創(chuàng)建和運行一類特殊的map/reduce作業(yè)。所謂的特殊的map/reduce作業(yè)可以是可執(zhí)行文件或腳本本件(python、PHP、c等)。Streaming使用“標準輸入”和“標準輸出”與我們編寫的Map和Reduce進行數據的交換。由此可知,任何能夠使用“標準輸入”和“標準輸出”的編程語言都可以用來編寫MapReduce程序)能在這個過程中除去代碼的編譯和打包的步驟,但是這一個過程還是很耗時,Pig的強大之處就是他只要幾行Pig Latin代碼就能處理TB級別的數據。Pig提供了多個命令用于檢查和處理程序中的數據結構,因此它能很好的支持我們寫查詢。Pig的一個很有用的特性就是它支持在輸入數據中有代表性的一個小的數據集上試運行。所以。我們在處理大的數據集前可以用那一個小的數據集檢查我們的程序是不是有錯誤的。

Pig為大型的數據集的處理提供了更高層次的抽象。MapReducer能夠讓我們自己定義連續(xù)執(zhí)行的map和reduce函數,但是數據處理往往需要很多的MapReducer過程才能實現,所以將數據處理要求改寫成MapReducer模式是很復雜的。和MapReducer相比,Pig提供了更加豐富的數據結構,一般都是多值嵌套的數據結構。Pig還提供了一套更強大的數據交換操作,包括了MapReducer中被忽視的"join"操作

Pig 被設計為可以擴展的,處理路徑上的每一個部分,載入,存儲,過濾分組,連接,都是可以定制的,這些操作都可以使用用戶定義函數(user-defined function,UDF)進行修改,這些函數作用于Pig的嵌套數據模型。因此,它們可以在底層與Pig的操作集成,UDF的另外的一個好處是它們比MapReducer程序開發(fā)的庫更易于重用。

但是。Pig并不適合處理所有的“數據處理”任務。和MapReducer一樣,它是為數據批處理而設計的,如果想執(zhí)行的查詢只涉及一個大型數據集的一小部分數據,Pig的實現不是很好,因為它要掃描整個數據集或其中的很大一部分。

Pig包括兩部分

1:用于描述數據流的語言,稱為Pig Latin(拉丁豬,個人翻譯)

2:用于運行PigLatin程序的執(zhí)行環(huán)境。一個是本地的單JVM執(zhí)行環(huán)境,一個就是在hadoop集群上的分布式執(zhí)行環(huán)境。

Pig ?Latin程序是由一系列的"操作"(operation)或"變換"(transformation)組成。每個操作或變換對輸入進行數據處理,然后產生輸出的結果。這些操作整體上描述了一個數據流,Pig執(zhí)行的環(huán)境把數據流翻譯為可執(zhí)行的內部表示,并運行它。在Pig的內部,這些變換和操作被轉換成一系列的MapReducer,但是我們一般情況下并不知道這些轉換是怎么進行的,我們的主要的精力就花在數據上,而不是執(zhí)行的細節(jié)上面。

在有些情況下,Pig的表現不如MapReducer程序??偨Y為一句就是要么話花大量的時間來優(yōu)化Java MapReducer程序,要么使用Pig Latin來編寫查詢確實能節(jié)約時間。

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容