Hadoop上開(kāi)源的類(lèi)SQL實(shí)時(shí)查詢系統(tǒng)對(duì)比
以前只用過(guò)Hive與impala兩個(gè)類(lèi)SQL查詢系統(tǒng),最近又將Hortonworks開(kāi)源的Stinger與Apache的Drill做了些調(diào)研。累死累活搞了一天的資料,頭都大了。為了紀(jì)念我那逝去的腦細(xì)胞,特將這些信息整理出來(lái)。
由于調(diào)查時(shí)間比較短(一天的時(shí)間都頭暈眼花了,再長(zhǎng)點(diǎn)估計(jì)我就要過(guò)勞死了),所寫(xiě)之處難免會(huì)有差錯(cuò),歡迎大家指正。
總體來(lái)說(shuō)雖然impala、stinger、drill三個(gè)系統(tǒng)都是類(lèi)SQL實(shí)時(shí)查詢系統(tǒng),但是它們的側(cè)重點(diǎn)完全不同。而且它們也不是為了替換Hive而生,hive在做數(shù)據(jù)倉(cāng)庫(kù)時(shí)還是很有價(jià)值的。
目前來(lái)說(shuō)只有impala比較成熟(人家標(biāo)稱要使用CDH版本hadoop,如果要使用apache的,要做好測(cè)試的心里準(zhǔn)備)。
其它兩個(gè)系統(tǒng)還都處理孵化狀態(tài),但是前景非常不錯(cuò)。
Impala
這個(gè)系統(tǒng)是Cloudera開(kāi)源的,時(shí)間大約是在12年下半年。雖然到現(xiàn)在才一年的時(shí)間但是已經(jīng)有很多人在使用。社區(qū)也比較活躍,大家可以在github上面看到項(xiàng)目的開(kāi)發(fā)人員與代碼提交情況(地址:https://github.com/cloudera/impala)。個(gè)人感覺(jué)開(kāi)發(fā)者雖然有其它幾個(gè)公司,但是還是以cloudera為主。這樣也造就了impala開(kāi)發(fā)的比較快速,雖然到現(xiàn)在才一年左右的時(shí)間,但是impala已經(jīng)可以很穩(wěn)定的運(yùn)行。
impala主要是為hdfs與hbase數(shù)據(jù)提供實(shí)時(shí)SQL查詢。它是根據(jù)google的dremel論文實(shí)現(xiàn)的一套分布式系統(tǒng),自用戶提交的SQL開(kāi)始都是基于自身的分析器與執(zhí)行器。下圖是其架構(gòu)圖
(圖片源自:impala安裝使用說(shuō)明書(shū))
由于完全脫離了M/R技術(shù),自身根據(jù)HDFS的文件分布來(lái)調(diào)整計(jì)算,所以速度較Hive有很大提升。根據(jù)我個(gè)人使用部分TPC基準(zhǔn)測(cè)(為什么是部分?沒(méi)理 由,我只選了一部分SQL來(lái)跑),impala雖然性能提升不像Cloudera標(biāo)稱的達(dá)到hive的一百倍,但是在比較復(fù)雜的情況下達(dá)到40-70倍性 能提高還是有的。
就日常使用來(lái)說(shuō),標(biāo)稱是支持大部分SQL-92標(biāo)準(zhǔn)(我也不清楚這個(gè)標(biāo)準(zhǔn)到底有多少,專(zhuān)業(yè)的童鞋給點(diǎn)解讀唄?。。8鶕?jù)我 是測(cè)試,日常用的SQL都沒(méi)有問(wèn)題。并且impala支持JDBC與ODBC的連接,這對(duì)于我們的使用也是很必要的,基于此特點(diǎn)我們可以開(kāi)發(fā)對(duì)應(yīng)業(yè)務(wù)系統(tǒng) 的UI部分,從而不用要求業(yè)務(wù)人員自己下SQL了(這是為數(shù)不多的展現(xiàn)工作成果的時(shí)候了)。
其次就是impala支持的文件格式,我們存取 數(shù)據(jù)的時(shí)候肯定要應(yīng)景的選擇壓縮與否以及文件的存儲(chǔ)格式。impala支持常用的Text、Sequence、avro格式,壓縮方面支持Snappy、 bzip、gzip以及deflate壓縮應(yīng)該可以滿足我們大部分的使用場(chǎng)景了。
而最棒的是它的UDF功能可以直接使用hive的udf庫(kù),而不需要修改任何代碼,使用hive的童鞋可以慶祝了,很多任務(wù)不需要任何改變即可平滑切換impala。不過(guò)因?yàn)閕mpala使用的是C開(kāi)發(fā)的,所以impala還是鼓勵(lì)大家寫(xiě)一個(gè)c下面的udf來(lái)提高性能。
drill
開(kāi)源時(shí)間跟impala差不多,只不過(guò)屬于Apache,。這個(gè)系統(tǒng)的目標(biāo)很宏大--抽象所有數(shù)據(jù)源,做成統(tǒng)一接口。底層支持hbase、mongoDB、HDFS、Cassandra等數(shù)據(jù)源。
它的數(shù)據(jù)接口都是插件化,理論上支持各種查詢語(yǔ)言,SQL自然也不例外,不過(guò)目前這個(gè)系統(tǒng)還是Apache的一個(gè)孵化項(xiàng)目,很多功能尚未完成與穩(wěn)定。但是可以預(yù)見(jiàn),這個(gè)系統(tǒng)如果完成是很有影響力的。下圖為drill的架構(gòu)圖。
(圖片源自:https://cwiki.apache.org/confluence/display/DRILL/High-level+Architecture)
Stinger
Hortonworks開(kāi)源的一個(gè)實(shí)時(shí)類(lèi)SQL查詢系統(tǒng),也是聲稱可以提升較hive 100倍的速度(悲崔的hive,都拿它來(lái)當(dāng)反面教材)。目前處于其計(jì)劃中三個(gè)階段的最后一個(gè)階段。
綜合來(lái)看Hortonwork做的事是在hive等分析系統(tǒng)的現(xiàn)有基上加了一個(gè)優(yōu)化層,所有的事都要經(jīng)過(guò)它的優(yōu)化層Tez(此框架是基于Yarn)來(lái)處理,以減少不必要的工作以及資源開(kāi)銷(xiāo)。雖然它也對(duì)HIVE進(jìn)行了很多的優(yōu)化與加強(qiáng),但是這個(gè)效果就要看子系統(tǒng)Tez的表現(xiàn)的了。Tez目前也是apache的孵化項(xiàng)目,Stringer如果要穩(wěn)定可以商用依然還有很多路要走。
從下面的示意圖大家可以了解Tez所處的位置。