Apache kylin內部解剖

一、Apache kylin的核心概念

  1. 表(Table ):表定義在hive中,是數據立方體(Data cube)的數據源,在build cube 之前,必須同步在 kylin中。
  2. 模型(model):模型描述了一個星型模式的數據結構,它定義了一個事實表(Fact Table: Wiki:Fact_table)和多個查找表(Lookup Table:Wiki:Lookup_table)的連接和過濾關係。
  3. 立方體(Cube):它定義了使用的模型、模型中的表的維度(dimension:Wiki:dimension)、度量(measure:Wiki:measure ,一般指聚合函數,如:sum、count、average等)、如何對分區( segments partition)、合併段(segments auto-merge)等的規則。
  4. 立方體段(Cube Segment):它是立方體構建(build)後的數據載體,一個 segment 映射hbase中的一張表,立方體實例構建(build)後,會產生一個新的segment,一旦某個已經構建的立方體的原始數據發生變化,只需刷新(fresh)變化的時間段所關聯的segment即可。

  5. 作業(Job):對立方體實例發出構建(build)請求後,會產生一個作業。該作業記錄了立方體實例build時的每一步任務信息。作業的狀態信息反映構建立方體實例的結果信息。如作業執行的狀態信息為RUNNING 時,表明立方體實例正在被構建;若作業狀態信息為FINISHED ,表明立方體實例構建成功;若作業狀態信息為ERROR ,表明立方體實例構建失敗!作業的所有狀態如下:
  • NEW - This denotes one job has been just created.
  • PENDING - This denotes one job is paused by job scheduler and waiting for resources.
  • RUNNING - This denotes one job is running in progress.
  • FINISHED - This denotes one job is successfully finished.
  • ERROR - This denotes one job is aborted with errors.
  • DISCARDED - This denotes one job is cancelled by end users.

二、Apache kylin的工作機制

Apache kylin 能提供低延遲(sub-second latency)的秘訣就是預計算,即針對一個星型拓撲結構的數據立方體,預計算多個維度組合的度量,然後將結果保存在hbase中,對外暴露JDBC、ODBC、Rest API的查詢介面,即可實現實時查詢。

數據立方體一般由Hive中的一個事實表,多個查找表組成。預計算的過程在kylin中就是 Cube 的build過程,如下圖:

當前Apache kylin構建(build)數據立方體,採用逐層演算法(By Layer Cubing)。未來的發布中將採用快速立方體演算法(Fast Cubing)。下面簡單介紹一下逐層演算法

一個完整的數據立方體,由N-dimension立方體,N-1 dimension立方體,N-2維立方體,0 dimension立方體這樣的層關係組成,除了N-dimension立方體,基於原數據計算,其他層的立方體可基於其父層的立方體計算。所以該演算法的核心是N次順序的MapReduce計算。

在MapReduce模型中,key由維度的組合的構成,value由度量的組合構成,當一個Map讀到一個key-value對時,它會計算所有的子立方體(child cuboid),在每個子立方體中,Map從key中移除一個維度,將新key和value輸出到reducer中。直到當所有層計算完畢,才完成數據立方體的計算。過程如下圖:

在數據立方體計算完畢後,有一個任務(Convert Cuboid Data to HFile),其職責是將reduce輸出的運算結果(Cuboid Data)轉化成Hbase中的存儲載體(HFile),最終將HFile 載入到Hbase表中便於查詢。其中表的rowkey由維度組合而成,維度組合對應的度量值構成了column family,為了查詢減少存儲空間,會對RowKey和column family的值進行編碼,默認編碼是Snappy。

整個數據立方體的構建流程如下:

三、Apache kylin的架構及核心組件

Apache kylin 架構如下:

核心組件:

  • 數據立方體構建引擎(Cube Build Engine):當前底層數據計算引擎支持MapReduce1、MapReduce2、Spark等。
  • Rest Server:當前kylin採用的rest API、JDBC、ODBC介面提供web服務。
  • 查詢引擎(Query Engine):Rest Server接收查詢請求後,解析sql語句,生成執行計劃,然後轉發查詢請求到Hbase中,最後將結構返回給 Rest Server。

參考文檔:

[1].Apache kylin核心概念。

[2].Apache kylin 立方體演算法。

推薦閱讀:

業務人員不知道如何提出 BI 需求,老闆不重視 BI 項目怎麼辦?
知識本體與大數據處理續
數據分析探索之旅(一):學習數據分析的初衷與規劃
24頁PPT詳解數據分析師成長之路 ---來自 陳丹奕 11月24 微課分享課件
大數據分析2017學習計劃

TAG:大数据分析 | Hadoop | 数据仓库 |