面向Hadoop框架的高級語言: Apache Pig

jopen 10年前發布 | 22K 次閱讀 分布式/云計算/大數據 Apache Pig

Apache Pig是用來處理大規模數據的高級查詢語言,配合 Hadoop使用,可以在處理海量數據時達到事半功倍的效果,比使用Java,C++等語言編寫大規模數據處理程序的難度要小N倍,實現同樣的效果的代碼 量也小N倍。Apache Pig為大數據集的處理提供了更高層次的抽象,為mapreduce算法(框架)實現了一套類SQL的數據處理腳本語言的shell腳本,在Pig中稱之 為Pig Latin,在這套腳本中我們可以對加載出來的數據進行排序、過濾、求和、分組(group by)、關聯(Joining),Pig也可以由用戶自定義一些函數對數據集進行操作,也就是傳說中的UDF(user-defined functions)。

Pig有兩種運行模式:Loca模式和MapReduce模式。當Pig在Local模式下運行時,Pig只訪問本地一臺主機;當Pig在 MapReduce模式下運行時,它將訪問一個Hadoop集群和HDFS的安裝位置。這時,Pig將自動地對這個集群進行分配和回收。因為Pig系統可 以自動對MapReduce程序進行優化,所以當用戶使用Pig Latin語言進行編程的時候,不必關心程序運行的效率,Pig系統將會自動對程序進行優化,這樣可以大了節省編程時間。Pig的Local模式和 MapReduce模式都有三種運行方式,分別為:Grunt Shell方式、腳本文件方式和嵌入式程序方式。

Pig是一種編程語言,它簡化了Hadoop常見的工作任務。Pig可加載數據、表達轉換數據以及存儲最終結果。Pig內置的操作使得半結構化數據變得有意義(如日志文件)。同時Pig可擴展使用Java中添加的自定義數據類型并支持數據轉換。

Pig在數據類型上的設計理念總結為一句口號:pig吃任何東西,輸入數據可以支持任何格式,pig天生支持那些流行的格式,如制表符分隔的文本文件,用戶也可以增加函數支持其他的數據格式文件,pig不需要元數據或者數據的schma,但如果有也可以利用。

Apache Pig基本架構

面向Hadoop框架的高級語言: Apache Pig

Pig的實現5個主要部分構成:

面向Hadoop框架的高級語言: Apache Pig

  1. Pig自己實現的一套框架對輸入、輸出的人機交互部分的實現,就是Pig Latin 。
  2. Zebra是Pig與HDFS/Hadoop的中間層、Zebra是MapReduce作業編寫的客戶端,Zerbra用結構化的語言實現了對 hadoop物理存儲元數據的管理也是對Hadoop的數據抽象層,Zebra中有2個核心的類 TableStore(寫)/TableLoad(讀)對Hadoop上的數據進行操作。
  3. Pig中的Streaming主要分為4個組件: 1. Pig Latin 2. 邏輯層(Logical Layer) 3. 物理層(Physical Layer) 4. Streaming具體實現(Implementation),Streaming會創建一個Map/Reduce作業,并把它發送給合適的集群,同時監 視這個作業的在集群環境中的整個執行過程。
  4. MapReduce在每臺機器上進行分布式計算的框架(算法)。
  5. HDFS最終存儲數據的部分。

與Hive對比

面向Hadoop框架的高級語言: Apache Pig

  • Language:在Hive中可以執行 “插入/刪除”等操作,但是Pig中我沒有發現有可以“插入”數據的方法。
  • Schemas:Hive中至少還有一個“表”的概念,但是Pig中我認為是基本沒有表的概念,所謂的表建立在Pig Latin腳本中,對與Pig更不要提metadata了。
  • Partitions:Pig中沒有表的概念,所以說到分區對于Pig來說基本免談,如果跟Hive說“分區”(Partition)他還是能明白的。
  • Server:Hive可以依托于Thrift啟動一個服務器,提供遠程調用。Pig沒有發現有這樣的功能。
  • Shell:在Pig 你可以執行一些個 ls 、cat 這樣很經典、很cool的命令,但是在使用Hive的時候我壓根就沒有想過有這樣的需求。
  • Web Interface:Hive有,Pig無
  • JDBC/ODBC:Pig無,Hive有

Pig的應用場景

  1. 數據查詢只面向相關技術人員
  2. 即時性的數據處理需求,這樣可以通過pig很快寫一個腳本開始運行處理,而不需要創建表等相關的事先準備工作。

Pig包括:

  • Pig Latin, 類SQL數據處理語言
  • 在Hadoop上運行的Pig Latin執行引擎,將pig腳本轉換為map-reduce程序在hadoop集群運行

Pig的優點:

  • 編碼簡單
  • 對常見的操作充分優化
  • 可擴展。自定義UDF

Pig主要用戶

  • Yahoo!: 90%以上的MapReduce作業是Pig生成的
  • 推ter: 80%以上的MapReduce作業是Pig生成的
  • Linkedin: 大部分的MapReduce作業是Pig生成的
  • 其他主要用戶: Salesforce, Nokia, AOL, comScore

Pig的主要開發者

  • Hortonworks
  • 推ter
  • Yahoo!
  • Cloudera

Pig工具

  • Piggybank(Pig官方函數庫)
  • Elephant bird: 推ter的Pig函數庫
  • DataFu: Linkedin的Pig函數庫
  • Ambros: 推ter的Pig作業監控系統
  • Mortardata: 基于云的Pig集群管理系統

Pig定位

面向Hadoop框架的高級語言: Apache Pig

Pig Latin語言和傳統的數據庫語言很相似,但是Pig Latin更側重于數據查詢。而不是對數據進行修改和刪除等操作。pig語句通常按照如下的格式來編寫。

  • 通過LOAD語句從文件系統讀取數據
  • 通過一系列”轉換”語句對數據進行處理
  • 通過一條STORE語句把處理結果輸出到文件系統中,或者使用DUMP語句把處理結果輸出到屏幕上。

LOAD和STORE語句有嚴格的語法規定。關鍵是靈活使用轉換語句對數據進行處理。

Pig Latin的特性:

  1. 易于編程。實現簡單的和高度并行的數據分析任務非常容易。
  2. 自動優化。任務編碼的方式允許系統自動去優化執行過程,從而使用戶能夠專注于邏輯,而非效率。
  3. 可擴展性,用戶可以輕松編寫自己的函數用于特殊用途的處理。

Pig Latin 程序有一系列的 operation 和 transformation 組成。每個操作或變換對輸入進行數據處理,然后產生輸出結果。這些操作整體上描述了一個數據流。Pig 內部,這些變換操作被轉換成一系列的 MapReduce 作業。Pig 不適合所有的數據處理任務,和 MapReduce 一樣,它是為數據批處理而設計的。如果只想查詢大數據集中的一小部分數據,Pig 的實現不會很好,因為它要掃描整個數據集或絕大部分。

面向Hadoop框架的高級語言: Apache Pig

參考資料

引用地址:http://www.biaodianfu.com/apache-pig.html
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!