HadoopDB:混合分布式系統
HadoopDB是一個Mapreduce和傳統關系型數據庫的結合方案,以充分利用RDBMS的性能和Hadoop的容錯、分布特性。2009年被Yale大學教授Abadi提出,繼而商業化為Hadapt,據稱從VC那兒拉到了10M刀投資。
本文是對HadoopDB論文的總結。其中不免摻雜些自己的不成熟想法,更詳細的內容,還請參見原論文 HadoopDB: An Architectural Hybrid of MapReduce and DBMS Technologies for Analytical Workloads
背景
PB級數據分析系統的能力要求
- 1.性能:節省開銷(時間、資金)。
- 2.容錯:數據分析系統(即使有故障節點也能順利工作) 不同于 事務型的系統的容錯(從故障中無損的恢復)。節點故障時,原來的查詢操作不需要重啟。
- 3.在異構型環境中運行的能力。即使所有機器硬件一樣,但某些機器在某些時候可能因為軟件原因、網絡原因也會性能降低。分布式操作時,要防止木桶效應。
- 4.活的查詢接口:商業化的數據分析一般建立在SQL查詢上,UDF等non-SQL也是需要的。
并行數據庫
滿足1,4:利用分表的方式,擴散到多個節點。一般情況下節點最多為幾十個,原因:1.每增加一個節點,失敗率增加;2.并行數據庫假設各個機器都是同質化的,但這往往不太可能
MapReduce
滿足2,3,4:Map - repartition - Reduce原為非結構化數據,但也可以適用結構化數據。
- 2:(錯誤節點)動態的規劃節點執行任務,將錯誤節點任務發放給新節點。并在本地磁盤做checkpoint存儲。
- 3:(拖后腿的節點)節點間冗余的執行。執行慢的節點的任務交付給速度快的節點執行
- 4:Hive的HQL
HadoopDB
融合了之前兩者,做出系統層面的改進,而不僅僅是語言和接口層面。
這三個解決方案對4個指標的關系如下圖:
架構
如圖
組件介紹
Databse Connector:
-
作用
hadoopTask <-通信-> Database on Node。節點上的DB類似于Hadoop中的數據源HDFS
-
實現
擴展了Hadoop的InputFormat
Catalog:
-
作用
1.鏈接參數如數據庫位置,驅動類和證書; 2.一些元數據如數據簇中的數據集,副本的位置,數據的劃分。
-
實現
HDFS上的XML。希望做成類似于Hadoop的namenode。
Data Loader
-
作用
將數據合理劃分,從HDFS轉移到節點中的本地文件系統
-
實現
global hasher:分配到不同節點 local hasher:繼續劃分為不同chunks
SQL to MapReduce to SQL (SMS) Planner
-
作用
將HiveQL轉化為特定執行計劃,在hadoopDB中執行。原則是盡可能的講操作推向節點上的RDBMS上執行,以此提高執行效率。
-
實現
擴展Hive: 1.執行查找前,用catolog的信息更新Hive的metastore,定向到節點數據庫的表 2.執行前,決定劃分的鍵;將部分查詢語句推到節點的數據庫中執行。
示例
示例參見下文的slides
總結
對hadoopDB的一些看法:
- 其數據預處理代價過高:數據需要進行兩次分解和一次數據庫加載操作后才能使用;
- 將查詢推向數據庫層只是少數情況,大多數情況下,查詢仍由Hive完成.因為數據倉庫查詢往往涉及多表連接,由于連接的復雜性,難以做到在保持連接數據局部性的前提下將參與連接的多張表按照某種模式劃分;
- 維護代價過高.不僅要維護Hadoop系統,還要維護每個數據庫節點;
- 目前尚不支持數據的動態劃分,需要手工一次劃分好
slides:
下載slides,請猛戳這里
參考資料
- HadoopDB: An Architectural Hybrid of MapReduce and DBMS Technologies for Analytical Workloads
- 《HadoopDB》 —— Fenng
- 《架構大數據:挑戰、現狀與展望》 計算機學報 王珊
來自:http://biaobiaoqi.me/blog/2013/05/18/a-hybrid-system-hadoopdb/