業(yè)內(nèi)有這樣一種說(shuō)法,SQL雖然在大數(shù)據(jù)分析領(lǐng)域久經(jīng)考驗(yàn),但是無(wú)奈長(zhǎng)江后浪推前浪,和炙手可熱的Hadoop相比,SQL已經(jīng)過(guò)時(shí)了。這個(gè)說(shuō)法有點(diǎn)言過(guò)其實(shí),現(xiàn)在很多的項(xiàng)目都是將Hadoop作為數(shù)據(jù)存儲(chǔ),然后利用SQL進(jìn)行前端查詢。這說(shuō)明Hadoop需要一種高級(jí)查詢語(yǔ)言的支持。 Hadoop MapReduce雖然能夠進(jìn)行數(shù)據(jù)分析,但是太復(fù)雜了。于是,開(kāi)發(fā)人員開(kāi)發(fā)出了類似SQL的Pig和Hive。
大數(shù)據(jù)時(shí)代,我們有很多的查詢工具可以選擇。雖然SQL占據(jù)著絕對(duì)優(yōu)勢(shì),但是隨著大數(shù)據(jù)的持續(xù)升溫,也給了Apache Pig和Hive很大的發(fā)揮空間。工欲善其事必先利其器,如果選擇了合適的平臺(tái)和語(yǔ)言,會(huì)讓數(shù)據(jù)的提取,處理和分析達(dá)到事半功倍的效果。未來(lái),數(shù)據(jù)會(huì)越來(lái)越大,數(shù)據(jù)分析必須要更易操作。處理速度快和操作簡(jiǎn)單必定成為大數(shù)據(jù)分析的主流趨勢(shì)。
Apache Pig,Apache Hive和SQL是當(dāng)今主流的大數(shù)據(jù)工具。它們各有優(yōu)勢(shì),下面我們就先來(lái)簡(jiǎn)單介紹Apache Pig、Apache Hive和SQL。
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ù)集
Apache Pig是雅虎在2006年開(kāi)發(fā),除了上述特點(diǎn),它還有很好的可擴(kuò)展性和性能優(yōu)化。 Apache Pig允許開(kāi)發(fā)人員跟蹤多個(gè)查詢方法,從而降低了數(shù)據(jù)的重復(fù)檢索。它支持復(fù)合數(shù)據(jù)類型(Map、Tuple、Bag),支持常見(jiàn)的數(shù)據(jù)操作,例如篩選、排序和Join。Apache Pig的這些特性得到了世界各地用戶的認(rèn)可,就連雅虎和推特也采用了Apache Pig。
Hive
盡管Apache Pig性能優(yōu)異,但是它要求程序員要掌握SQL之外的知識(shí)。Hive和SQL非常相似,雖然Hive查詢語(yǔ)言(HQL)有一定的局限性,但它仍然是非常好用的。Hive為MapReduce提供了很好的開(kāi)源實(shí)現(xiàn)。它在分布式處理數(shù)據(jù)方面表現(xiàn)很好,不像SQL需要嚴(yán)格遵守模式。
數(shù)據(jù)的提取、處理和分析沒(méi)有一個(gè)萬(wàn)全之策,需要綜合多種因素來(lái)選擇,例如數(shù)據(jù)存儲(chǔ)方法,編程語(yǔ)言結(jié)構(gòu)以及預(yù)期的結(jié)果。下面我們就來(lái)對(duì)比一下Pig、Hive和SQL,看看它們各自都適合什么樣的場(chǎng)景。
Pig VS SQL
SQL在DBMS系統(tǒng)的運(yùn)行速度要比MapReduce(Pig運(yùn)行在PigLatin平臺(tái))快。然而,RDBMS的數(shù)據(jù)加載很具挑戰(zhàn),設(shè)置困難。 PigLatin在聲明式執(zhí)行計(jì)劃、ETL流程和管道修改方面更有優(yōu)勢(shì)。
在很大程度上,SQL是聲明式語(yǔ)言,而PigLatin是過(guò)程語(yǔ)言。SQL主要是指定完成的對(duì)象,即要完成“什么”,而Pig主要是制定完成的方式,即“如何”執(zhí)行一個(gè)任務(wù)。在執(zhí)行之前,Pig腳本要轉(zhuǎn)化成MapReduce任務(wù)。不過(guò),Pig腳本比相應(yīng)的MapReduce任務(wù)要短,顯著縮短了開(kāi)發(fā)時(shí)間。
Hive VS SQL
SQL是一個(gè)被廣泛用于事務(wù)性和分析查詢的通用數(shù)據(jù)庫(kù)語(yǔ)言。而Hive是以數(shù)據(jù)分析為目標(biāo)而設(shè)計(jì)的,這也決定了Hive會(huì)缺少更新和刪除功能,但是讀取和處理海量數(shù)據(jù)的能力會(huì)很強(qiáng)。Hive和SQL是非常相似的,最主要的區(qū)別就是Hive缺少更新和刪除功能。
盡管Hive和SQL有所區(qū)別,但是如果你有SQL背景,就可以平穩(wěn)過(guò)渡到Hive。另外,一定要注意兩者在結(jié)構(gòu)和語(yǔ)法上的差異。
相信大家通過(guò)上面對(duì)Pig、Hive和SQL的介紹,對(duì)它們都有了一定的了解,下面我們就來(lái)介紹一下它們的具體適用場(chǎng)景。
Apache Pig的適用場(chǎng)景
Apache Pig適用于非結(jié)構(gòu)化的數(shù)據(jù)集,可以充分利用SQL。Pig無(wú)需構(gòu)建MapReduce任務(wù),如果你有SQL學(xué)習(xí)的背景,那么入門(mén)會(huì)非常快。
Apache Hive的應(yīng)用場(chǎng)景
很多企業(yè)都需要對(duì)歷史數(shù)據(jù)進(jìn)行分析,Hive就是一款分析歷史數(shù)據(jù)的利器。但是Hive只有在結(jié)構(gòu)化數(shù)據(jù)的情況下才能大顯神威。Hive的軟肋是實(shí)時(shí)分析,如果想要進(jìn)行實(shí)時(shí)分析,可以采用HBase。
SQL的應(yīng)用場(chǎng)景
SQL是三者之中資歷最老的數(shù)據(jù)分析工具,隨著用戶需求的不斷變更,SQL也在不斷的自我更新,現(xiàn)在仍然是一個(gè)與時(shí)俱進(jìn)的工具。對(duì)專業(yè)的數(shù)據(jù)分析師來(lái)說(shuō),毫無(wú)疑問(wèn),SQL比Excel要強(qiáng),但是,它在快速處理和分析數(shù)據(jù)方面仍然存在著短板。如果數(shù)據(jù)要求不是很苛刻,SQL是一個(gè)很好的選擇,它的廣泛性和靈活性得到了開(kāi)發(fā)人員的認(rèn)可。因?yàn)榻^大數(shù)的開(kāi)發(fā)人員都熟悉SQL,所以可以馬上上手,同時(shí)SQL還提供了一些擴(kuò)展和優(yōu)化功能,可以根據(jù)需求來(lái)定制產(chǎn)品。
現(xiàn)在還沒(méi)有任何一個(gè)工具可以適用所有的數(shù)據(jù),SQL、Pig和Hive都有各自的適用場(chǎng)景,所以適合自己應(yīng)用場(chǎng)景的工具就是最好的工具。