1、Apache kylin的核心概念
- 表(Table ):表定義在hive中,是數據立方體(Data cube)的數據源,在build cube 以前,必須同步在 kylin中。
- 模型(model):模型描述了一個星型模式的數據結構,它定義了一個事實表(Fact Table: Wiki:Fact_table)和多個查找表(Lookup Table:Wiki:Lookup_table)的鏈接和過濾關係。
- 立方體(Cube):它定義了使用的模型、模型中的表的維度(dimension:Wiki:dimension)、度量(measure:Wiki:measure ,通常指聚合函數,如:sum、count、average等)、如何對段分區( segments partition)、合併段(segments auto-merge)等的規則。
- 立方體段(Cube Segment):它是立方體構建(build)後的數據載體,一個 segment 映射hbase中的一張表,立方體實例構建(build)後,會產生一個新的segment,一旦某個已經構建的立方體的原始數據發生變化,只需刷新(fresh)變化的時間段所關聯的segment便可。
- 做業(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.
2、Apache kylin的工做機制
Apache kylin 能提供低延遲(sub-second latency)的祕訣就是預計算,即針對一個星型拓撲結構的數據立方體,預計算多個維度組合的度量,而後將結果保存在hbase中,對外暴露JDBC、ODBC、Rest API的查詢接口,便可實現實時查詢。web
數據立方體通常由Hive中的一個事實表,多個查找表組成。預計算的過程在kylin中就是 Cube 的build過程,以下圖:算法
當前Apache kylin構建(build)數據立方體,採用逐層算法(By Layer Cubing)。將來的發佈中將採用快速立方體算法(Fast Cubing)。下面簡單介紹一下逐層算法:sql
一個完整的數據立方體,由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。
整個數據立方體的構建流程以下:
app
3、Apache kylin的架構及核心組件
Apache kylin 架構以下:函數
核心組件:ui
- 數據立方體構建引擎(Cube Build Engine):當前底層數據計算引擎支持MapReduce一、MapReduce二、Spark等。
- Rest Server:當前kylin採用的rest API、JDBC、ODBC接口提供web服務。
- 查詢引擎(Query Engine):Rest Server接收查詢請求後,解析sql語句,生成執行計劃,而後轉發查詢請求到Hbase中,最後將結構返回給 Rest Server。