當前,Hadoop之上的SQL引擎已經很是多了,歸納起來有兩類系統,分別是:html
(1)將SQL轉化爲MapReduce。典型表明是Apache Hive,這種系統的特色是擴展性和容錯性好,但性能低下。爲了彌補SQL on MapReduce的不足,google提出了Tenzing(見參考資料[3]),與Hive不一樣,Tenzing充分借鑑了MapReduce和DataBase的優點,首先,它對傳統的MapReduce進行了優化(好比Map 能夠不寫磁盤,Reduce可沒必要排序等),使其性能更高,採用MapReduce一大優點是使Tenzing具備了很好的擴展性和容錯性,Tenzing論文是這樣表述的:git
「Thanks to MapReduce, Tenzing scales to thousands of cores and petabytes of data on cheap, unreliable hardware. We worked closely with the MapReduce team to implement and take advantage of MapReduce optimizations.」github
其次,它借鑑了傳統database的優點,嵌有一個cost-based 優化器,以對SQL查詢計劃進行充分優化。數據庫
(2)借鑑分佈式數據庫思想。典型表明是Google Dremel、Apache Drill和Cloudera Impala,這類系統的特色是性能高(與Hive等系統比),但擴展性(包括集羣規模擴展和SQL類型支持多樣性)和容錯性較差,Google在Dremel論文(見參考資料[4])中這樣描述Dremel的適用場景:apache
「Dremel is not intended as a replacement for MR and is often used in conjunction with it to analyze outputs of MR pipelines or rapidly prototype larger computations.」segmentfault
也就是說,Dremel並非用以取代MR的,而是彌補MR不足,一般用於分析MR產生的數據(這些數據量小,處理這些數據時,對SQL表達能力和框架容錯性要求低)。api
Apache tajo(具體見參考資料[1][2],tajo ppt下載,tajo paper下載)是韓國大學數據庫實驗室開源的基於YARN的分佈式數據倉庫,目前是Apache的二級項目。Tajo的設計思想相似於Tenzing,它充分借鑑了MapReduce和DataBase的優點,使其具備Hive的擴展性和容錯性好的優勢,但同時性能比Hive高很多。架構
Tajo採用了Master-worker架構,具體以下:app
(1) TajoMaster:爲客戶端提供查詢服務和管理各個QueryMaster。框架
(2) QueryMaster:負責一個query的解析、優化與執行,它與多個task runner worker協同工做,完成一個query的計算。
以下圖所示,Tajo採用傳統數據庫技術開發了SQL解析器,包括SQL解析,生成查詢計劃、優化查詢計劃、執行查詢技術等,但與傳統數據庫不一樣,Tajo最終執行查詢計劃時借鑑了MapReduce的設計思想,它將查詢計劃轉化爲一系列任務,這樣,執行查詢計劃實際上就是執行這些任務,而每一個任務是一個計算單位,同Map Task和Reduce Task同樣,它能夠重複執行、有進度彙報等,這樣,Tajo能夠直接使用MapReduce中的容錯、推測執行等機制。此外,Tajo使用YARN進行資源管理。
我在前一篇博文《Apache Tez:一個運行在YARN之上支持DAG做業的計算框架》中介紹了Tez,其中談到Hive+Tez,經Tez優化後的Hive是一個很是有前景的項目,此外,Tajo也談到,未來不排除使用Tez做爲底層計算框架的可能:
Besides, Tez has some overlapping functions with Tajo. However, Tez is in the pre-alpha stage and may be a prototype. When Tez becomes feasible, Tajo could use Tez as an underlying framework according to the applicability. However, Tajo will still use its row/native columnar execution engine and its optimizer. Tajo may be potentially the first application of Tez.
真正可能取代Hive的是Tenzing或者Tajo這樣的系統,而不是相似Dremel或者Impala的系統。後者在擴展性、SQL表達能力(主要是它的嵌套存儲模型致使的)和容錯性等方面遠遠差於Hive/Tenzing/Tajo,正如Dremel論文所述,Dremel一般與MR結合使用,設計動機並非取代MR,而是使某些場景下的計算更加高效。此外,Dremel和Impala是一種計算系統,它們須要計算資源,卻沒有集成到當前發展迅猛的資源管理系統YARN中,這意味着,若是採用Impala這樣的系統,你只能單獨搭一個獨立的專有集羣,沒法作到資源共享。即便Impala成熟了,若是Hive的取代品(好比Tajo)沒有成熟,則長期時間內,大部分公司仍然主要採用Hive(這時候,Hortonworks的Hive+Tez就有用武之地了)進行大數據處理,而Impala僅用於進一步處理Hive輸出的結果或者用於某一類適合場景的應用(畢竟這類系統的SQL表達能力有限,容錯性和擴展性差)。
就Tajo而言,目前活躍度很低,只有韓國大學的數據庫實驗室的幾我的在開發,離真正的可用還有很長時間,但它已經邁出了第一步,即成爲Apache的項目,讓更多的人蔘與進來。