Kudu:一個爲大數據快速分析量身定製的新型Apache Hadoop存儲系統

Apache Hadoop提供了一系列數據存儲與處理的組件,覆蓋了多種多樣、應用於企業級關鍵服務的用戶案例。在Cloudera,我們一直在努力探索Hadoop的各種可能性,拓展Hadoop的邊界——使得Hadoop更快、更好用、更安全。


2012年,我們開啓了一個關於Apache Hadoop存儲系統的驗證工作(避免Hadoop被約束在部分特定用戶案例中)。驗證過程中,我們發現了一些重要的發展趨勢並最終決定去開發一個新型的存儲系統,對HDFSApache HBase提供的功能進行補充。現在,我們非常自豪地推出Kudu,一個Hadoop生態系統上的新生開源組件。Kudu的目標是:

  • 提供快速的全量數據分析與實時處理功能;

  • 充分利用先進CPUI/O資源;

  • 支持數據更新

  • 簡單、可擴展的數據模型


在這裏,我們會對打造Kudu的動機、Kudu架構等給出簡單的介紹。


功能上的空白

在很多Cloudera的客戶環境中,我們發現了“混合架構 (hybrid architecture)”的趨勢,即很多Hadoop工具會被同時部署。HBase主要被用於支撐數據導入,(及其)快速的小查詢執行,更重要的是支持數據的隨機修改。而HDFSImpala組合的使用可以高效處理列式存儲數據(例如Apache Parquet),在大規模數據集上提供高性能的分析型查詢。


目前,大部分客戶都被迫去打造一個混合式的架構,將多個工具集成在一起進行使用。客戶首先選擇一種存儲系統導入、更新數據,但是後續爲了最優化分析型報表的生成就得轉向採用另一種存儲系統。雖然我們的客戶已經成功地部署、維護了這樣的混合架構,但是我們相信,如果一個存儲系統能夠爲多種不同類型的工作負載提供高性能的處理能力,那麼對於那種需要使用混合架構才能解決的問題將是更加優雅的解決方案。



新的硬件

另一個我們在客戶現場發現的趨勢是硬件能力的不斷加強。首先是內存的增長,從32GB2012年的128GB到如今的256GB。然後是磁盤,現在在很多普通服務器中SSD的應用也是屢見不鮮HBaseHDFS、以及其他的Hadoop工具通過調整、升級也在不斷適應更新換代的硬件,但是這些系統在當初設計時集羣的瓶頸在於底層磁盤的速度。最優化磁盤存儲架構的設計對於現代架構(大量數據可以緩存在內存中,永久存儲層數據的隨機訪問速度是原來的100多倍)就未必是最優的。


另外,隨着存儲層數據訪問速度的不斷增長,整個系統性能的瓶頸反而轉向了CPU。當存儲層越來越快,CPU效率變得愈發關鍵


Kudu簡介

爲了應對先前發現的這些趨勢,有兩種不同的方式:持續更新現有的Hadoop工具或者重新設計開發一個新的組件。其目標是:

  • 對數據掃描(scan)和隨機訪問(random access)同時具有高性能,簡化用戶複雜的混合架構;

  • CPU效率,最大化先進處理器的效能;

  • IO性能,充分利用先進永久存儲介質;

  • 支持數據的原地更新,避免額外的數據處理、數據移動


我們爲了實現這些目標,首先在現有的開源項目上實現原型,但是最終我們得出結論:需要從架構層作出重大改變。而這些改變足以讓我們重新開發一個全新的數據存儲系統。於是3年前開始開發,直到如今我們終於可以分享多年來的努力成果:Kudu,一個新的數據存儲系統。



Kudu設計

從用戶的角度而言,Kudu是用於存儲結構化數據的(tables)。表,具有一個定義明確的表結構(schema)包含一組預先定義的列。每個表具有一個主鍵(primary key),由一到多個列所組成。主鍵強加了數據唯一性的約束,同時也像索引一樣可以加速數據的更新和刪除。


Kudu表包含了一系列邏輯數據子集(Tablets),跟如同傳統數據庫系統的分區(Partition)。Kudu原生提供數據可用性支持,通過將Tablets複製到不同機器的方式(Raft consensus算法)處理硬件錯誤帶來的數據不可訪問問題。每個Tablets的大小一般在幾十個GB左右,一個獨立的服務器節點一般可以爲10—100Tablets提供服務。


Kudu採用master後臺進程管理元數據(就像是目錄catalog,描述數據的邏輯結構)、在硬件錯誤恢復時實現調度(coordinator)以及記錄每個tablet服務器上tablets的狀態等。Kudu使用多個master後臺進程以提供管理節點的高可用性。Kudu實現了Raft Consensus算法,因此很多master進程的功能都可以通過Tablet服務器實現,在未來的發展路線圖中,master的職責也會被分散到不同的機器上。另外,Kudumaster後臺進程不會成爲整個集羣性能的瓶頸,根據在250節點集羣的測試中,master後臺進程完全沒有性能的問題。


存儲於Kudu的數據是可修改的(利用log-structured變種算法)。更新、插入、刪除都是臨時先緩衝於內存,隨後合併進永久性列式存儲中。Kudu爲了保證查詢延遲不出現大的波動,也會週期性地進行小型維護操作,比如compaction


Kudu提供了C++Java API支持點操作與批操作。Kudu的另一個目標是與現有的Hadoop生態系統工具進行集成。目前,KuduBeta版本已經與ImpalaMapReduce以及Apache Spark實現了整合。隨着時間的推移,我們計劃將Kudu集成到整個Hadoop生態系統中。


更多Kudu架構細節,請查閱http://getkudu.io/kudu.pdf

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章