Apache Pig是MapReduce的一個抽象。它是一個工具/平臺,用於分析較大的數據集,並將它們表示爲數據流。Pig一般與 Hadoop 一塊兒使用;咱們可使用Apache Pig在Hadoop中執行全部的數據處理操做。程序員
要使用 Apache Pig 分析數據,程序員須要使用Pig Latin語言編寫腳本。全部這些腳本都在內部轉換爲Map和Reduce任務。Apache Pig有一個名爲 Pig Engine 的組件,它接受Pig Latin腳本做爲輸入,並將這些腳本轉換爲MapReduce做業。apache
爲何要使用Apache Pig編程
-
使用 Pig Latin ,程序員能夠輕鬆地執行MapReduce做業,而無需在Java中鍵入複雜的代碼。設計模式
-
Apache Pig使用多查詢方法,從而減小代碼長度。例如,須要在Java中輸入200行代碼(LoC)的操做在Apache Pig中輸入少到10個LoC就能輕鬆完成。最終,Apache Pig將開發時間減小了近16倍。架構
-
Pig Latin是相似SQL的語言,當你熟悉SQL後,很容易學習Apache Pig。框架
-
Apache Pig提供了許多內置操做符來支持數據操做,如join,filter,ordering等。此外,它還提供嵌套數據類型,例如tuple(元組),bag(包)和MapReduce缺乏的map(映射)。編程語言
Apache Pig具備如下特色:函數
-
豐富的運算符集 - 它提供了許多運算符來執行諸如join,sort,filer等操做。工具
-
易於編程 - Pig Latin與SQL相似,若是你善於使用SQL,則很容易編寫Pig腳本。oop
-
優化機會 - Apache Pig中的任務自動優化其執行,所以程序員只須要關注語言的語義。
-
可擴展性 - 使用現有的操做符,用戶能夠開發本身的功能來讀取、處理和寫入數據。
-
用戶定義函數 - Pig提供了在其餘編程語言(如Java)中建立用戶定義函數的功能,而且能夠調用或嵌入到Pig腳本中。
-
處理各類數據 - Apache Pig分析各類數據,不管是結構化仍是非結構化,它將結果存儲在HDFS中。
Apache Pig與MapReduce
下面列出的是Apache Pig和MapReduce之間的主要區別。
Apache Pig | MapReduce |
---|---|
Apache Pig是一種數據流語言。 | MapReduce是一種數據處理模式。 |
它是一種高級語言。 |
MapReduce是低級和剛性的。 |
在Apache Pig中執行Join操做很是簡單。 | 在MapReduce中執行數據集之間的Join操做是很是困難的。 |
任何具有SQL基礎知識的新手程序員均可以方便地使用Apache Pig工做。 | 向Java公開是必須使用MapReduce。 |
Apache Pig使用多查詢方法,從而在很大程度上減小代碼的長度。 | MapReduce將須要幾乎20倍的行數來執行相同的任務。 |
沒有必要編譯。執行時,每一個Apache Pig操做符都在內部轉換爲MapReduce做業。 | MapReduce做業具備很長的編譯過程。 |
Apache Pig Vs SQL
下面列出了Apache Pig和SQL之間的主要區別。
Pig | SQL |
Pig Latin是一種程序語言。 | SQL是一種聲明式語言。 |
在Apache Pig中,模式是可選的。咱們能夠存儲數據而無需設計模式(值存儲爲$ 01,$ 02等) | 模式在SQL中是必需的。 |
Apache Pig中的數據模型是嵌套關係。 | SQL 中使用的數據模型是平面關係。 |
Apache Pig爲查詢優化提供有限的機會。 | 在SQL中有更多的機會進行查詢優化。 |
除了上面的區別,Apache Pig Latin:
- 容許在pipeline(流水線)中拆分。
- 容許開發人員在pipeline中的任何位置存儲數據。
- 聲明執行計劃。
- 提供運算符來執行ETL(Extract提取,Transform轉換和Load加載)功能。
Apache Pig VS Hive
Apache Pig和Hive都用於建立MapReduce做業。在某些狀況下,Hive以與Apache Pig相似的方式在HDFS上運行。在下表中,咱們列出了幾個重要的點區分Apache Pig與Hive。
Apache Pig | Hive |
---|---|
Apache Pig使用一種名爲 Pig Latin 的語言(最初建立於 Yahoo )。 | Hive使用一種名爲 HiveQL 的語言(最初建立於Facebook )。 |
Pig Latin是一種數據流語言。 | HiveQL是一種查詢處理語言。 |
Pig Latin是一個過程語言,它適合流水線範式。 | HiveQL是一種聲明性語言。 |
Apache Pig能夠處理結構化,非結構化和半結構化數據。 | Hive主要用於結構化數據。 |
Apache Pig的應用程序
Apache Pig一般被數據科學家用於執行涉及特定處理和快速原型設計的任務。使用Apache Pig:
- 處理巨大的數據源,如Web日誌。
- 爲搜索平臺執行數據處理。
- 處理時間敏感數據的加載
用於使用Pig分析Hadoop中的數據的語言稱爲 Pig Latin ,是一種高級數據處理語言,它提供了一組豐富的數據類型和操做符來對數據執行各類操做。
要執行特定任務時,程序員使用Pig,須要用Pig Latin語言編寫Pig腳本,並使用任何執行機制(Grunt Shell,UDFs,Embedded)執行它們。執行後,這些腳本將經過應用Pig框架的一系列轉換來生成所需的輸出。
Apache Pig的架構
Apache Pig組件
如圖所示,Apache Pig框架中有各類組件。讓咱們來看看主要的組件。
Parser(解析器)
最初,Pig腳本由解析器處理,它檢查腳本的語法,類型檢查和其餘雜項檢查。解析器的輸出將是DAG(有向無環圖),它表示Pig Latin語句和邏輯運算符。在DAG中,腳本的邏輯運算符表示爲節點,數據流表示爲邊。
Optimizer(優化器)
邏輯計劃(DAG)傳遞到邏輯優化器,邏輯優化器執行邏輯優化,例如投影和下推。
Compiler(編譯器)
編譯器將優化的邏輯計劃編譯爲一系列MapReduce做業。
Execution engine(執行引擎)
最後,MapReduce做業以排序順序提交到Hadoop。這些MapReduce做業在Hadoop上執行,產生所需的結果。
Pig Latin數據模型
Pig Latin的數據模型是徹底嵌套的,它容許複雜的非原子數據類型,例如 map 和 tuple 。
Atom(原子)
Pig Latin中的任何單個值,不管其數據類型,都稱爲 Atom 。它存儲爲字符串,能夠用做字符串和數字。int,long,float,double,chararray和bytearray是Pig的原子值。一條數據或一個簡單的原子值被稱爲字段。例:「raja「或「30"
Tuple(元組)
由有序字段集合造成的記錄稱爲元組,字段能夠是任何類型。元組與RDBMS表中的行相似。例:(Raja,30)
Bag(包)
一個包是一組無序的元組。換句話說,元組(非惟一)的集合被稱爲包。每一個元組能夠有任意數量的字段(靈活模式)。包由「{}"表示。它相似於RDBMS中的表,可是與RDBMS中的表不一樣,不須要每一個元組包含相同數量的字段,或者相同位置(列)中的字段具備相同類型。
例:{(Raja,30),(Mohammad,45)}
包能夠是關係中的字段;在這種狀況下,它被稱爲內包(inner bag)。
例:{Raja,30, {9848022338,raja@gmail.com,} }
Map(映射)
映射(或數據映射)是一組key-value對。key須要是chararray類型,且應該是惟一的。value能夠是任何類型,它由「[]"表示,
例:[name#Raja,age#30]
Relation(關係)
一個關係是一個元組的包。Pig Latin中的關係是無序的(不能保證按任何特定順序處理元組)。
源自:https://www.w3cschool.cn/apache_pig