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