pig簡介

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組件

如圖所示,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

相關文章
相關標籤/搜索