Apache Hadoop提供了一系列數據存儲與處理的組件,覆蓋了多種多樣、應用于企業級關鍵服務的用戶案例。在Cloudera,我們一直在努力探索Hadoop的各種可能性,拓展Hadoop的邊界——使得Hadoop更快、更好用、更安全。
自2012年,我們開啟了一個關于Apache Hadoop存儲系統的驗證工作(避免Hadoop被約束在部分特定用戶案例中)。驗證過程中,我們發現了一些重要的發展趨勢并最終決定去開發一個新型的存儲系統,對HDFS與Apache HBase提供的功能進行補充。現在,我們非常自豪地推出Kudu,一個Hadoop生態系統上的新生開源組件。Kudu的目標是:
提供快速的全量數據分析與實時處理功能;
充分利用先進CPU與I/O資源;
支持數據更新;
簡單、可擴展的數據模型
在這里,我們會對打造Kudu的動機、Kudu架構等給出簡單的介紹。
功能上的空白在很多Cloudera的客戶環境中,我們發現了“混合架構 (hybrid architecture)”的趨勢,即很多Hadoop工具會被同時部署。HBase主要被用于支撐數據導入,(及其)快速的小查詢執行,更重要的是支持數據的隨機修改。而HDFS與Impala組合的使用可以高效處理列式存儲數據(例如Apache Parquet),在大規模數據集上提供高性能的分析型查詢。
目前,大部分客戶都被迫去打造一個混合式的架構,將多個工具集成在一起進行使用??蛻羰紫冗x擇一種存儲系統導入、更新數據,但是后續為了最優化分析型報表的生成就得轉向采用另一種存儲系統。雖然我們的客戶已經成功地部署、維護了這樣的混合架構,但是我們相信,如果一個存儲系統能夠為多種不同類型的工作負載提供高性能的處理能力,那么對于那種需要使用混合架構才能解決的問題將是更加優雅的解決方案。
新的硬件另一個我們在客戶現場發現的趨勢是硬件能力的不斷加強。首先是內存的增長,從32GB到2012年的128GB到如今的256GB。然后是磁盤,現在在很多普通服務器中SSD的應用也是屢見不鮮。HBase、HDFS、以及其他的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—100個Tablets提供服務。
Kudu采用master后臺進程管理元數據(就像是目錄catalog,描述數據的邏輯結構)、在硬件錯誤恢復時實現調度(coordinator)以及記錄每個tablet服務器上tablets的狀態等。Kudu使用多個master后臺進程以提供管理節點的高可用性。Kudu實現了Raft Consensus算法,因此很多master進程的功能都可以通過Tablet服務器實現,在未來的發展路線圖中,master的職責也會被分散到不同的機器上。另外,Kudu的master后臺進程不會成為整個集群性能的瓶頸,根據在250節點集群的測試中,master后臺進程完全沒有性能的問題。
存儲于Kudu的數據是可修改的(利用log-structured變種算法)。更新、插入、刪除都是臨時先緩沖于內存,隨后合并進永久性列式存儲中。Kudu為了保證查詢延遲不出現大的波動,也會周期性地進行小型維護操作,比如compaction。
Kudu提供了C++、Java API支持點操作與批操作。Kudu的另一個目標是與現有的Hadoop生態系統工具進行集成。目前,Kudu的Beta版本已經與Impala、MapReduce以及Apache Spark實現了整合。隨著時間的推移,我們計劃將Kudu集成到整個Hadoop生態系統中。