Apache kylin 原理和架構

Apache Kylin™是一個開源的分佈式分析引擎,提供Hadoop之上的SQL查詢接口及多維分析(OLAP)能力以支持超大規模數據,最初由eBay Inc. 開發並貢獻至開源社區。它能在亞秒內查詢巨大的Hive表。

1.基本原理

kylin的核心思想是預計算,理論基礎是:以空間換時間。即多多維分析可能用到的度量進行預計算,將計算好的結果保存成Cube並存儲到hbase中,供查詢時直接訪問。把高複雜度的聚合運算,多表連接等操作轉換成對預計算結果的查詢。

基本概念:

  • Cuboid: Kylin中將維度任意組合成爲一個Cuboid。
  • Cube: Kylin中將所有維度組合成爲一個Cube,即包含所有的Cuboid。


爲了剛好的適應大數據環境,Kylin通常從用來做數據倉庫的hive中讀取源數據,使用mapreduce作爲cube構建引擎,把預計算結果保存到Hbase中,對外暴露Restful API/JDBC/ODBC的查詢接口。因爲Kylin支持標出你的ANSI SQL,所以可以和常用數據分析工具(如Tableau,Excel等)進行無縫對接。

2.Kylin架構


Kylin核心模塊:

1)REST Server: 

 REST Server是一套面向應用程序開發的入口點,旨在實現針對Kylin平臺的應用開發工作。 此類應用程序可以提供查詢、獲取結果、觸發cube構建任務、獲取元數據以及獲取用戶權限等等。 另外可以通過Restful接口實現SQL查詢。

2)查詢引擎(Query Engine):

當cube準備就緒後,查詢引擎就能夠獲取並解析用戶查詢。它隨後會與系統中的其它組件進行交互,從而向用戶返回對應的結果。  
在Kylin當中,我們使用一套名爲Apache Calcite的開源動態數據管理框架對代碼內的SQL以及其它插入內容進行解析。(Calcite最初被命名爲Optiq,由Julian Hyde所編寫,但如今已經成爲Apache孵化器項目之一。) 

3)Routing

負責將解析的SQL生成的執行計劃轉換成cube緩存的查詢,cube是通過預計算緩存在hbase中,這部分查詢可以在秒級設置毫秒級完成,而且還有一些操作使用過的查詢原始數據(存儲在Hadoop的hdfs中通過hive查詢)。這部分查詢延遲較高。

4)元數據管理工具(Metadata Manager)

 Kylin是一款元數據驅動型應用程序。元數據管理工具是一大關鍵性組件,用於對保存在Kylin當中的所有元數據進行管理,其中包括最爲重要的cube元數據。其它全部組件的正常運作都需以元數據管理工具爲基礎。 Kylin的元數據存儲在hbase中。 

5)任務引擎(Cube Build Engine):

這套引擎的設計目的在於處理所有離線任務,其中包括shell腳本、Java API以及Map Reduce任務等等。任務引擎對Kylin當中的全部任務加以管理與協調,從而確保每一項任務都能得到切實執行並解決其間出現的故障。  
6) 存儲引擎(Storage Engine)

這套引擎負責管理底層存儲——特別是cuboid,其以鍵-值對的形式進行保存。存儲引擎使用的是HBase——這是目前Hadoop生態系統當中最理想的鍵-值系統使用方案。Kylin還能夠通過擴展實現對其它鍵-值系統的支持,例如Redis。  

7) ODBC驅動程序

爲了支持第三方工具與應用程序——例如Tableau——我們構建起了一套ODBC驅動程序並對其進行了開源。我們的目標是讓用戶能夠更爲順暢地採用這套Kylin平臺。  


Kylin是一個MOLAP分析系統,建模時候只支持一張事實表,多張維表,如果業務需求複雜,考慮在hive中進行進一步處理,比如生成一張大的寬表或者採用view代替。

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