秒級SQL多維分析引擎——Apache Kylin

0 術語

略。基本可以從wikipedia上找到解釋。

http://kylin.incubator.apache.org/docs/gettingstarted/terminology.html

1 架構簡介

在介紹Kylin的各種操作之前,首先讓我們來了解一下Kylin的總體設計,包括其架構、工作流程、和數據模型。

1.1 架構

Kylin目前是一個MOLAP系統,也就是基於對Cube進行預計算來滿足低延遲的查詢處理。Kylin的數據源就是Hive上的表,以星型模式存在。Kylin的離線計算過程(下圖中藍色箭頭的數據流)會讀取Hive中的原始數據,將事實表和維表join起來,然後對各種維度組合(cuboid)進行計算。計算後的cube以key-value的形式存儲在HBase中。

對於SQL請求,Kylin的查詢引擎會判斷SQL能否由HBase中的cube滿足。如果可以,查詢就會轉換為HBase的range scan操作,直接獲得結果數據,因此能做到秒級的響應。對於無法由cube實現的查詢,Kylin可以將查詢路由給Hive執行,不過當前版本由於性能原因,disable了路由查詢的功能。

秒級SQL多維分析引擎——Apache Kylin

1.2 工作流程

使用Kylin的工作流程如下圖所示。

秒級SQL多維分析引擎——Apache Kylin

首先,RD創建一個Kylin的項目。一個項目中可以定義多個Cube。

然後,RD需要告訴Kylin需要訪問Hive上的哪些表,即「加載Hive表」。注意這裡Kylin只會從Hive Metastore同步表的元信息,並不會讀取表的數據。

之後就是最主要的「Cube建模」過程。這一步就是定義Cube的元信息,包括Data Model(指定事實表與維表,以及他們的連接方式)和Cube Model(有哪些維度和度量,如何增量刷新,以及聚集組和rowkey這些高級設置)。

建模完成之後,RD就可以出發「Cube構建」的動作了。Kylin提供了Cube構建管理的REST API,因此Cube的構建是可以與現有的調度系統集成的。

Cube構建成功之後,數據分析師就可以進行查詢啦,例如進行常見的上卷下鑽操作。下一小節會提到,Kylin中的Cube對分析師是透明的,分析師還是對Hive中的星型模式查詢,這是Kylin區別於其他方案(例如生產aggr表和summary表)的主要特徵。

1.3 數據模型

在Kylin系統內,不同角色人員看到的數據模型是不同的。下圖說明了其中的區別。

秒級SQL多維分析引擎——Apache Kylin

  • 對於終端用戶(即數據分析師),其看到的數據是在Hive中以星型模式組織起來的表,並且使用SQL對這些表進行分析。這些表可能在使用Kylin之前就存在於數據倉庫之中了,也就是說,Kylin對於終端用戶應該是“透明”的。但是在實際場景裡,由於Hive和Kylin在SQL語法以及支持的查詢類型等方面的區別,目前Kylin還無法做到完全的透明。不過Kylin在設計中是有「查詢路由」模塊的,該模塊會把無法重寫到HBase的查詢路由給Hive執行,從而實現真正的透明。
  • 對於Cube建模人員,其任務是建立從Hive源表到HBase KV模型的映射。因此Cube建模人員接觸的數據模型主要是Cube的元信息,包括標識事實表和維表、標識維度屬性和度量屬性(Aggregation)、以及定義HBase的rowkey等。
  • 最後,對於系統管理員,其面對的主要是物理數據模型,即存儲系統的KV模型。

2 Cube建模

關於Cube建模的步驟和操作方式,目前官方教程已經比較全面了,故不再贅述。請讀者自行閱讀。

http://kylin.incubator.apache.org/docs/tutorial/create_cube.html


分享到:


相關文章: