大數(shù)據(jù)查詢分析是云計算中核心問題之一,自從Google在2006年之前的幾篇論文奠定云計算領(lǐng)域基礎(chǔ),尤其是GFS、Map-Reduce、 Bigtable被稱為云計算底層技術(shù)三大基石。GFS、Map-Reduce技術(shù)直接支持了Apache Hadoop項目的誕生。Bigtable和Amazon Dynamo直接催生了NoSQL這個嶄新的數(shù)據(jù)庫領(lǐng)域,撼動了RDBMS在商用數(shù)據(jù)庫和數(shù)據(jù)倉庫方面幾十年的統(tǒng)治性地位。FaceBook的Hive項 目是建立在Hadoop上的數(shù)據(jù)倉庫基礎(chǔ)構(gòu)架,提供了一系列用于存儲、查詢和分析大規(guī)模數(shù)據(jù)的工具。當我們還浸淫在GFS、Map-Reduce、 Bigtable等Google技術(shù)中,并進行理解、掌握、模仿時,Google在2009年之后,連續(xù)推出多項新技術(shù),包括:Dremel、 Pregel、Percolator、Spanner和F1。其中,Dremel促使了實時計算系統(tǒng)的興起,Pregel開辟了圖數(shù)據(jù)計算這個新方 向,Percolator使分布式增量索引更新成為文本檢索領(lǐng)域的新標準,Spanner和F1向我們展現(xiàn)了跨數(shù)據(jù)中心數(shù)據(jù)庫的可能。在Google的第 二波技術(shù)浪潮中,基于Hive和Dremel,新興的大數(shù)據(jù)公司Cloudera開源了大數(shù)據(jù)查詢分析引擎Impala,Hortonworks開源了 Stinger,F(xiàn)ackbook開源了Presto。類似Pregel,UC Berkeley AMPLAB實驗室開發(fā)了Spark圖計算框架,并以Spark為核心開源了大數(shù)據(jù)查詢分析引擎Shark。由于某電信運營商項目中大數(shù)據(jù)查詢引擎選型需 求,本文將會對Hive、Impala、Shark、Stinger和Presto這五類主流的開源大數(shù)據(jù)查詢分析引擎進行簡要介紹以及性能比較,最后進 行總結(jié)與展望。Hive、Impala、Shark、Stinger和Presto的進化圖譜。
圖1. Impala、Shark、Stinger和Presto的進化圖譜
當前主流引擎簡介
基于Map-Reduce模式的Hadoop擅長數(shù)據(jù)批處理,不是特別符合即時查詢的場景。實時查詢一般使用MPP (Massively Parallel Processing)的架構(gòu),因此用戶需要在Hadoop和MPP兩種技術(shù)中選擇。在Google的第二波技術(shù)浪潮中,一些基于Hadoop架構(gòu)的快速 SQL訪問技術(shù)逐步獲得人們關(guān)注?,F(xiàn)在有一種新的趨勢是MPP和Hadoop相結(jié)合提供快速SQL訪問框架。最近有四個很熱門的開源工具出 來:Impala、Shark、Stinger和Presto。這也顯示了大數(shù)據(jù)領(lǐng)域?qū)τ贖adoop生態(tài)系統(tǒng)中支持實時查詢的期望??傮w來 說,Impala、Shark、Stinger和Presto四個系統(tǒng)都是類SQL實時大數(shù)據(jù)查詢分析引擎,但是它們的技術(shù)側(cè)重點完全不同。而且它們也不 是為了替換Hive而生,Hive在做數(shù)據(jù)倉庫時是非常有價值的。這四個系統(tǒng)與Hive都是構(gòu)建在Hadoop之上的數(shù)據(jù)查詢工具,各有不同的側(cè)重適應(yīng) 面,但從客戶端使用來看它們與Hive有很多的共同之處,如數(shù)據(jù)表元數(shù)據(jù)、Thrift接口、ODBC/JDBC驅(qū)動、SQL語法、靈活的文件格式、存儲 資源池等。Hive與Impala、Shark、Stinger、Presto在Hadoop中的關(guān)系如圖2所示。Hive適用于長時間的批處理查詢分 析,而Impala、Shark、Stinger和Presto適用于實時交互式SQL查詢,它們給數(shù)據(jù)分析人員提供了快速實驗、驗證想法的大數(shù)據(jù)分析工 具??梢韵仁褂肏ive進行數(shù)據(jù)轉(zhuǎn)換處理,之后使用這四個系統(tǒng)中的一個在Hive處理后的結(jié)果數(shù)據(jù)集上進行快速的數(shù)據(jù)分析。下面,從問題域出發(fā)簡單介紹 Hive、Impala、Shark、Stinger和Presto:
圖2. Hive與Impala、Shark、Stinger、Presto在Hadoop中的關(guān)系
當前主流引擎架構(gòu)
Hive
Hive是基于Hadoop的一個數(shù)據(jù)倉庫工具,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫表,并提供完整的SQL查詢功能,可以將SQL語句轉(zhuǎn)換為 Map-Reduce任務(wù)進行運行,十分適合數(shù)據(jù)倉庫的統(tǒng)計分析。其架構(gòu)如圖3所示,Hadoop和Map-Reduce是Hive架構(gòu)的根基。Hive 架構(gòu)包括如下組件:CLI(Command Line Interface)、JDBC/ODBC、Thrift Server、Meta Store和Driver(Complier、Optimizer和Executor)。
1) Hive,披著SQL外衣的Map-Reduce。Hive是為方便用戶使用Map-Reduce而在外面封裝了一層SQL,由于Hive采 用了SQL,它的問題域比Map-Reduce更窄,因為很多問題,SQL表達不出來,比如一些數(shù)據(jù)挖掘算法,推薦算法、圖像識別算法等,這些仍只能通過 編寫Map-Reduce完成。
2) Impala:Google Dremel的開源實現(xiàn)(Apache Drill類似),因為交互式實時計算需求,Cloudera推出了Impala系統(tǒng),該系統(tǒng)適用于交互式實時處理場景,要求最后產(chǎn)生的數(shù)據(jù)量一定要少。
3) Shark/Spark:為了提高Map-Reduce的計算效率,Berkeley的AMPLab實驗室開發(fā)了Spark,Spark可看 做基于內(nèi)存的Map-Reduce實現(xiàn),此外,伯克利還在Spark基礎(chǔ)上封裝了一層SQL,產(chǎn)生了一個新的類似Hive的系統(tǒng)Shark。