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