Apache Pig 概述

2018-12-29 16:41 更新

什么是Apache Pig?

Apache Pig是MapReduce的一個(gè)抽象。它是一個(gè)工具/平臺(tái),用于分析較大的數(shù)據(jù)集,并將它們表示為數(shù)據(jù)流。Pig通常與 Hadoop 一起使用;我們可以使用Apache Pig在Hadoop中執(zhí)行所有的數(shù)據(jù)處理操作。

要編寫數(shù)據(jù)分析程序,Pig提供了一種稱為 Pig Latin 的高級(jí)語(yǔ)言。該語(yǔ)言提供了各種操作符,程序員可以利用它們開(kāi)發(fā)自己的用于讀取,寫入和處理數(shù)據(jù)的功能。

要使用 Apache Pig 分析數(shù)據(jù),程序員需要使用Pig Latin語(yǔ)言編寫腳本。所有這些腳本都在內(nèi)部轉(zhuǎn)換為Map和Reduce任務(wù)。Apache Pig有一個(gè)名為 Pig Engine 的組件,它接受Pig Latin腳本作為輸入,并將這些腳本轉(zhuǎn)換為MapReduce作業(yè)。

為什么我們需要Apache Pig?

不太擅長(zhǎng)Java的程序員通常習(xí)慣于使用Hadoop,特別是在執(zhí)行任一MapReduce作業(yè)時(shí)。Apache Pig是所有這樣的程序員的福音。

  • 使用 Pig Latin ,程序員可以輕松地執(zhí)行MapReduce作業(yè),而無(wú)需在Java中鍵入復(fù)雜的代碼。

  • Apache Pig使用多查詢方法,從而減少代碼長(zhǎng)度。例如,需要在Java中輸入200行代碼(LoC)的操作在Apache Pig中輸入少到10個(gè)LoC就能輕松完成。最終,Apache Pig將開(kāi)發(fā)時(shí)間減少了近16倍。

  • Pig Latin是類似SQL的語(yǔ)言,當(dāng)你熟悉SQL后,很容易學(xué)習(xí)Apache Pig。

  • Apache Pig提供了許多內(nèi)置操作符來(lái)支持?jǐn)?shù)據(jù)操作,如join,filter,ordering等。此外,它還提供嵌套數(shù)據(jù)類型,例如tuple(元組),bag(包)和MapReduce缺少的map(映射)。

Apache Pig的特點(diǎn)

Apache Pig具有以下特點(diǎn):

  • 豐富的運(yùn)算符集 - 它提供了許多運(yùn)算符來(lái)執(zhí)行諸如join,sort,filer等操作。

  • 易于編程 - Pig Latin與SQL類似,如果你善于使用SQL,則很容易編寫Pig腳本。

  • 優(yōu)化機(jī)會(huì) - Apache Pig中的任務(wù)自動(dòng)優(yōu)化其執(zhí)行,因此程序員只需要關(guān)注語(yǔ)言的語(yǔ)義。

  • 可擴(kuò)展性 - 使用現(xiàn)有的操作符,用戶可以開(kāi)發(fā)自己的功能來(lái)讀取、處理和寫入數(shù)據(jù)。

  • 用戶定義函數(shù) - Pig提供了在其他編程語(yǔ)言(如Java)中創(chuàng)建用戶定義函數(shù)的功能,并且可以調(diào)用或嵌入到Pig腳本中。

  • 處理各種數(shù)據(jù) - Apache Pig分析各種數(shù)據(jù),無(wú)論是結(jié)構(gòu)化還是非結(jié)構(gòu)化,它將結(jié)果存儲(chǔ)在HDFS中。

Apache Pig與MapReduce

下面列出的是Apache Pig和MapReduce之間的主要區(qū)別。

Apache PigMapReduce
Apache Pig是一種數(shù)據(jù)流語(yǔ)言。MapReduce是一種數(shù)據(jù)處理模式。
它是一種高級(jí)語(yǔ)言。MapReduce是低級(jí)和剛性的。
在Apache Pig中執(zhí)行Join操作非常簡(jiǎn)單。在MapReduce中執(zhí)行數(shù)據(jù)集之間的Join操作是非常困難的。
任何具備SQL基礎(chǔ)知識(shí)的新手程序員都可以方便地使用Apache Pig工作。向Java公開(kāi)是必須使用MapReduce。
Apache Pig使用多查詢方法,從而在很大程度上減少代碼的長(zhǎng)度。MapReduce將需要幾乎20倍的行數(shù)來(lái)執(zhí)行相同的任務(wù)。
沒(méi)有必要編譯。執(zhí)行時(shí),每個(gè)Apache Pig操作符都在內(nèi)部轉(zhuǎn)換為MapReduce作業(yè)。MapReduce作業(yè)具有很長(zhǎng)的編譯過(guò)程。

Apache Pig Vs SQL

下面列出了Apache Pig和SQL之間的主要區(qū)別。

PigSQL
Pig Latin是一種程序語(yǔ)言。SQL是一種聲明式語(yǔ)言。
在Apache Pig中,模式是可選的。我們可以存儲(chǔ)數(shù)據(jù)而無(wú)需設(shè)計(jì)模式(值存儲(chǔ)為$ 01,$ 02等)模式在SQL中是必需的。
Apache Pig中的數(shù)據(jù)模型是嵌套關(guān)系。SQL 中使用的數(shù)據(jù)模型是平面關(guān)系。
Apache Pig為查詢優(yōu)化提供有限的機(jī)會(huì)。在SQL中有更多的機(jī)會(huì)進(jìn)行查詢優(yōu)化。

除了上面的區(qū)別,Apache Pig Latin:

  • 允許在pipeline(流水線)中拆分。
  • 允許開(kāi)發(fā)人員在pipeline中的任何位置存儲(chǔ)數(shù)據(jù)。
  • 聲明執(zhí)行計(jì)劃。
  • 提供運(yùn)算符來(lái)執(zhí)行ETL(Extract提取,Transform轉(zhuǎn)換和Load加載)功能。

Apache Pig VS Hive

Apache Pig和Hive都用于創(chuàng)建MapReduce作業(yè)。在某些情況下,Hive以與Apache Pig類似的方式在HDFS上運(yùn)行。在下表中,我們列出了幾個(gè)重要的點(diǎn)區(qū)分Apache Pig與Hive。

Apache PigHive
Apache Pig使用一種名為 Pig Latin 的語(yǔ)言(最初創(chuàng)建于 Yahoo )。Hive使用一種名為 HiveQL 的語(yǔ)言(最初創(chuàng)建于 Facebook )。
Pig Latin是一種數(shù)據(jù)流語(yǔ)言。HiveQL是一種查詢處理語(yǔ)言。
Pig Latin是一個(gè)過(guò)程語(yǔ)言,它適合流水線范式。HiveQL是一種聲明性語(yǔ)言。
Apache Pig可以處理結(jié)構(gòu)化,非結(jié)構(gòu)化和半結(jié)構(gòu)化數(shù)據(jù)。Hive主要用于結(jié)構(gòu)化數(shù)據(jù)。

Apache Pig的應(yīng)用程序

Apache Pig通常被數(shù)據(jù)科學(xué)家用于執(zhí)行涉及特定處理和快速原型設(shè)計(jì)的任務(wù)。使用Apache Pig:

  • 處理巨大的數(shù)據(jù)源,如Web日志。
  • 為搜索平臺(tái)執(zhí)行數(shù)據(jù)處理。
  • 處理時(shí)間敏感數(shù)據(jù)的加載。

Apache Pig歷史

2006年 時(shí),Apache Pig是作為Yahoo的研究項(xiàng)目開(kāi)發(fā)的,特別是在每個(gè)數(shù)據(jù)集上創(chuàng)建和執(zhí)行MapReduce作業(yè)。 2007 時(shí),Apache Pig是通過(guò)Apache孵化器開(kāi)源的。 2008 時(shí),Apache Pig的第一個(gè)版本出來(lái)了。 2010 時(shí),Apache Pig獲得為Apache頂級(jí)項(xiàng)目。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)