數據倉庫裏面存儲引擎是非常重要的,存儲引擎的好壞,基本決定了整個數倉的基礎。
kudu目標
cloudera公司最近發佈了一個kudu存儲引擎。按照cloudera的想法,kudu的出現是爲了解決,hbase,parquet不能兼顧分析和更新的需求,所以需要一個新的存儲引擎可以同時支持高吞吐的分析應用以及少量更新的應用。cloudera 的設計目標是:(http://blog.cloudera.com/blog/2015/09/kudu-new-apache-hadoop-storage-for-fast-analytics-on-fast-data/)
• Strong performance for both scan and random access to help customers simplify complex hybrid architectures
在掃描和隨機訪問兩種場景下都有很強的性能,幫助客戶簡化混合架構。
• High CPU efficiency in order to maximize the return on investment that our customers are making in modern processors
高cpu利用率
• High IO efficiency in order to leverage modern persistent storage
高io效率充分利用現代存儲
• The ability to update data in place, to avoid extraneous processing and data movement
支持數據原地更新
• The ability to support active-active replicated clusters that span multiple data centers in geographically distant locations
支持雙活複製集羣
kudu核心機制
Cloudera有一篇論文描述kudu的機制,Kudu: Storage for Fast Analytics on Fast Data 。可以從http://getkudu.io/kudu.pdf下載。這裏簡單說下kudu的關鍵機制。
-
模仿數據庫,以二維表的形式組織數據,創建表的時候需要指定schema。所以只支持結構化數據。
-
每個表指定一個或多個主鍵。
-
支持insert/update/delete,這些修改操作全部要指定主鍵。
-
read操作,只支持scan原語。
-
一致性模型,默認支持snapshot ,這個可以保證scan和單個客戶端 read-you-writes一致性保證。更強的一致性保證,提供manually propagate timestamps between clients或者commit-wait。
-
cluster類似hbase簡單的M-S結構,master支持備份。
-
單個表支持水平分割,partitions叫tablets,單行一定在一個tablets裏面,支持範圍,以及list等更靈活的分區鍵。
-
使用Raft 協議,可以根據SLA指定備份塊數量。
-
列式存儲
-
delta flushes,數據先更新到內存中,最後在合併到最終存儲中,有專門到後臺進程負責。
-
Lazy Materialization ,對一些選擇性謂詞,可以幫助跳過很多不必要的數據。
-
支持和MR/SPARK/IMPALA等集成,支持Locality ,Columnar Projection ,Predicate pushdown 等。
總結
爲應對BI領域少量更新和大量掃描分析場景,kudu 借鑑了很多傳統數倉等技術。對這個領域目前是impala+kudu/Hive/Spark SQL/Greenplum MPP數據庫在混戰,未來這個會走向融合,傳統的mpp數據庫個人認爲會是一個過渡產品。
微信掃一掃
關注該公衆號