1. 背景
目前,Hadoop之上的SQL引擎已經非常多了,概括起來有兩類系統,分别是:
(1)将SQL轉化為MapReduce。典型代表是
Apache Hive,這種系統的特點是擴充性和容錯性好,但性能低下。為了彌補SQL on MapReduce的不足,google提出了
Tenzing(見參考資料[3]),與Hive不同,Tenzing充分借鑒了MapReduce和DataBase的優勢,首先,它對傳統的MapReduce進行了優化(比如Map 可以不寫磁盤,Reduce可不必排序等),使其性能更高,采用MapReduce一大優勢是使Tenzing具有了很好的擴充性和容錯性,Tenzing論文是這樣表述的:
“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.”
其次,它借鑒了傳統database的優勢,嵌有一個cost-based 優化器,以對SQL查詢計劃進行充分優化。
(2)借鑒分布式資料庫思想。典型代表是
Google Dremel、
Apache Drill和
Cloudera Impala,這類系統的特點是性能高(與Hive等系統比),但擴充性(包括叢集規模擴充和SQL類型支援多樣性)和容錯性較差,Google在Dremel論文(見參考資料[4])中這樣描述Dremel的适用場景:
“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.”
也就是說,Dremel并不是用以取代MR的,而是彌補MR不足,通常用于分析MR産生的資料(這些資料量小,處理這些資料時,對SQL表達能力和架構容錯性要求低)。
Apache tajo(具體見參考資料[1][2],
tajo ppt下載下傳,
tajo paper下載下傳)是
南韓大學資料庫實驗室開源的基于YARN的分布式資料倉庫,目前是Apache的二級項目。Tajo的設計思想類似于Tenzing,它充分借鑒了MapReduce和DataBase的優勢,使其具有Hive的擴充性和容錯性好的優點,但同時性能比Hive高不少。
2. Tajo設計架構
Tajo采用了Master-worker架構,具體如下:
(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.

3.總結
真正可能取代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的項目,讓更多的人參與進來。