kudu

Apache Kudu 介紹算法

Apache Hadoop提供了一系列數據存儲與處理的組件,覆蓋了多種多樣,應用於企業級關鍵服務的用戶案例。數據庫

在Clondera,咱們一直在努力探索Hadoop的各類可能性,擴展Hadoop的邊界--使用Hadoop更快、更好用、更安全。緩存

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

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

充分利用先進CPU與I/O資源;架構

支持數據更新;dom

簡單、可擴展的數據模型;工具

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

 

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

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

 

新的硬件
另外一個咱們在客戶現場發現的趨勢是硬件能力的不斷增強。首先是內存的增加,從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生態系統中。

相關文章
相關標籤/搜索