更新時間:2017-09-01 來源:黑馬程序員云計算大數(shù)據(jù)培訓(xùn)學(xué)院 瀏覽量:
Pig與Hive 誰才是未來?
2-1 背景
SQL
結(jié)構(gòu)化查詢語言(SQL)是程序員的最佳伴侶,主要用于處理和提取數(shù)據(jù)。大數(shù)據(jù)改變了數(shù)據(jù)處理和可視化的方式。但是SQL嚴格的關(guān)系數(shù)據(jù)庫模式和聲明特性依然是數(shù)據(jù)分析的標桿。盡管SQL市場廣闊,但是大數(shù)據(jù)也對SQL的功能和性能提出了挑戰(zhàn)。
Pig
Apache Pig適合有SQL背景的程序員學(xué)習(xí),其有以下兩個特點:
1.放寬了對數(shù)據(jù)存儲的要求
2.可以操作大型數(shù)據(jù)集
除了上述特點,它還有很好的可擴展性和性能優(yōu)化。 Apache Pig允許開發(fā)人員跟蹤多個查詢方法,從而降低了數(shù)據(jù)的重復(fù)檢索。它支持復(fù)合數(shù)據(jù)類型(Map、Tuple、Bag),支持常見的數(shù)據(jù)操作,例如篩選、排序和Join。Apache Pig的這些特性得到了世界各地用戶的認可。
Hive
盡管Apache Pig性能優(yōu)異,但是它要求程序員要掌握SQL之外的知識。Hive和SQL非常相似,雖然Hive查詢語言(HQL)有一定的局限性,但它仍然是非常好用的。Hive為MapReduce提供了很好的開源實現(xiàn)。它在分布式處理數(shù)據(jù)方面表現(xiàn)很好,不像SQL需要嚴格遵守模式。
數(shù)據(jù)的提取、處理和分析沒有一個萬全之策,需要綜合多種因素來選擇,例如數(shù)據(jù)存儲方法,編程語言結(jié)構(gòu)以及預(yù)期的結(jié)果。下面我們就來對比一下Pig、Hive和SQL,看看它們各自都適合什么樣的場景。
2-2 Pig工作原理
Apache PIG提供一套高級語言平臺,用于對結(jié)構(gòu)化與非結(jié)構(gòu)化數(shù)據(jù)集進行操作與分析。這種語言被稱為Pig Latin,其屬于一種腳本形式,可直接立足于PIG shell執(zhí)行或者通過Pig Server進行觸發(fā)。用戶所創(chuàng)建的腳本會在初始階段由Pig Latin處理引擎進行語義有效性解析,而后被轉(zhuǎn)換為包含整體執(zhí)行初始邏輯的定向非循環(huán)圖(簡稱DAG)。
另外,這套處理引擎亦可接受DAG并在內(nèi)部執(zhí)行計劃優(yōu)化——具體優(yōu)化方式包括PIG程序方法以及惰性計算。
為了理解這一優(yōu)化機制的原理,我們假定用戶編寫了一套腳本,該腳本對兩套數(shù)據(jù)集進行一項連接操作,而后是一條過濾標準。PIG優(yōu)化器能夠驗證過濾操作是否能夠在連接之前進行,從而保證連接負載最小化。如果可以,則其將據(jù)此進行邏輯規(guī)劃設(shè)計。如此一來,用戶即可專注于最終結(jié)果,而非將精力分散在性能保障身上。
只有在經(jīng)過完全優(yōu)化的邏輯規(guī)劃準備就緒之后,編譯才會生效。其負責(zé)生成物理規(guī)劃,即為最終駐留于HDFS中的數(shù)據(jù)分配與之交互的執(zhí)行引擎。
2-3 Hive工作原理
Apache Hive在本質(zhì)上屬于一套數(shù)據(jù)倉儲平臺,用于同存儲在HDFS或者HBase內(nèi)的大規(guī)模結(jié)構(gòu)化數(shù)據(jù)集進行交互。Hive查詢語言在這一點上類似于SQL,二者都能夠與Hadoop實現(xiàn)良好集成。而Pig則不同,其執(zhí)行流程為純聲明性,因此適合供數(shù)據(jù)科學(xué)家用于實現(xiàn)數(shù)據(jù)呈現(xiàn)與分析。
在與Hive進行交互時,用戶可以直接通過Hive命令行界面直接接入,或者與Hiveserver交互。任何提交查詢都會首先由該驅(qū)動程序占用,而后由編譯器進行語法及語義驗證。另外,Hive metastore負責(zé)保存全部與Hive相關(guān)數(shù)據(jù)的模式/映射關(guān)系,其在驗證查詢中信息語義方面扮演著重要角色。
該驅(qū)動立足于語義之上執(zhí)行優(yōu)化,同時負責(zé)準備執(zhí)行規(guī)劃并將其提交至HQL查詢引擎。這套引擎依賴于實際執(zhí)行引擎(例如MapReduce與Spark等)。任何對模式的成功修改都會通過HQL處理引擎被更新至metastore當中。
2-4 總結(jié)
Hive更適合于數(shù)據(jù)倉庫的任務(wù),Hive主要用于靜態(tài)的結(jié)構(gòu)以及需要經(jīng)常分析的工作。Hive與SQL相似促使 其成為Hadoop與其他BI工具結(jié)合的理想交集。而且很多企業(yè)都需要對歷史數(shù)據(jù)進行分析,Hive就是一款分析歷史數(shù)據(jù)的利器。但是Hive只有在結(jié)構(gòu)化數(shù)據(jù)的情況下才能大顯神威。Hive的軟肋是實時分析,如果想要進行實時分析,可以采用HBase。
Pig賦予開發(fā)人員在大數(shù)據(jù)集領(lǐng)域更多的靈活性,并允許開發(fā)簡潔的腳本用于轉(zhuǎn)換數(shù)據(jù)流以便嵌入到較大的 應(yīng)用程序。并且Apache Pig適用于非結(jié)構(gòu)化的數(shù)據(jù)集,可以充分利用SQL。Pig無需構(gòu)建MapReduce任務(wù),如果你有SQL學(xué)習(xí)的背景,那么入門會非常快。
Pig相比Hive相對輕量,它主要的優(yōu)勢是相比于直接使用Hadoop Java APIs可大幅削減代碼量。正因為如此,Pig仍然是吸引大量的軟件開發(fā)人員。
所以二者皆提供出色的靈活性以及可擴展性,用于實現(xiàn)各類定制化功能。另外,二者也擁有自己的明確角色定位,因此其具體優(yōu)劣完全取決于您在項目當中的實際要求。
本文版權(quán)歸黑馬程序員云計算大數(shù)據(jù)培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明作者出處。謝謝!云計算大數(shù)據(jù)培訓(xùn)之大數(shù)據(jù)Hadoop生態(tài)圈:Pig(1)
2017-09-01云計算大數(shù)據(jù)培訓(xùn)之Spark調(diào)優(yōu)(4)
2017-09-01云計算大數(shù)據(jù)培訓(xùn)之Spark調(diào)優(yōu)(3)
2017-09-01云計算大數(shù)據(jù)培訓(xùn)之Spark調(diào)優(yōu)(2)
2017-09-01云計算大數(shù)據(jù)培訓(xùn)之Spark調(diào)優(yōu)(1)
2017-09-01云計算大數(shù)據(jù)培訓(xùn)之Hadoop組件:zookeeper(3)
2017-09-01