一、簡介
Apache Kylin™是一個開源的、分布式的分析型數據倉庫,提供Hadoop/Spark 之上的 SQL 查詢接口及多維分析(OLAP)能力以支持超大規模數據,最初由 eBay 開發並貢獻至開源社區。之所以說它是國人之光,是因為它是首個由國人主導的Apache頂級開源項目,能在亞秒內查詢巨大的表。
二、基本概念
先了解一下幾個概念,如下有一張表
| ID | 客戶號 | 交易日期 | 交易類型 | 金額 |
| 1 | 001 | 20201230 | 工資代發 | 1000000 |
| 2 | 002 | 20210101 | 轉賬 | 66666 |
| 3 | 003 | 20210115 | 信用卡還款 | 1888 |
查詢某個客戶在哪個時間進行某種交易的金額,這種是多維分析,其中客戶號、交易日期和交易類型是維度(Dimensions),金額是度量(Measures)。
根據表格中三個維度一個度量,可以畫出如下圖形
對於一個多維模型,在查詢上有多種組合,比如一維的:客戶號/交易日期/交易類型二維的:客戶號+交易日期/客戶號+交易類型/交易日期和交易類型三維的:客戶號+交易日期+交易類型對於每一種組合,稱之為
Cuboid,這這些組合的統一,則是
Cube。Cube定義了使用的模型、模型的維度和度量等信息。
三、作用及原理
有些讀者就要說了:概念講了一堆,就是不說它到底為什么出現,解決什么問題,難怪閱讀量這么少
別急,這不就准備講了嘛。
Kylin是為減少在Hadoop/Spark上百億規模數據查詢延遲而設計的。
對於效率要求較高的大規模數據集的查詢,尤其多維查詢的時候,數據倉庫中一般存在事實表和維度表,需要關聯很多維度表,這就給查詢帶來一定的壓力,查詢效率低下。為了解決這個問題,Kylin應運而生。
但是Kylin為什么快呢?
主要是因為它的
預計算,它將多維分析可能用到的度量進行預計算,將計算好的結果保存成Cube並存儲到HBase中,供查詢時直接訪問。說到底就是用空間換時間。
大致流程
:將數據源(比如Hive)中的數據按照指定的維度和指標,由計算引擎MapReduce離線計算出所有可能的查詢結果(即Cube)存儲到HBase中。HBase中每行記錄的Rowkey由各維度的值拼接而成,度量會保存在column family中。為了減少存儲代價,會對維度和度量進行編碼。查詢階段,利用HBase列存儲的特性就可以保證Kylin有良好的快速響應和高並發。
四、Kylin的架構
Kylin的架構主要有這幾個部分:
源數據:Hive、Kafka、RDBMS等;
對外查詢接口:REST API、JDBC/ODBC;
存儲引擎:HBase;
構建Cube的計算引擎。
其中構建Cube的計算引擎模塊如下:
REST Server:是一套面向應用程序開發的入口點,旨在實現針對Kylin平台的應用開發工作。
Query Engine:當cube准備就緒后,查詢引擎就能夠獲取並解析用戶查詢。
Routing:查詢路由,負責將解析的SQL生成的執行計划轉換成cube緩存的查詢,若查詢沒辦法從cube緩存中獲取,則下壓至數據源進行查詢。
Metadata:Kylin是由元數據驅動的。元數據管理工具是一大關鍵性組件,用於對保存在Kylin當中的所有元數據進行管理,其中包括最為重要的cube元數據。
Cube Build Engine:這套引擎的作用在於處理所有離線任務。
五、總結
本文大概介紹了Kylin以及一些相關的概念和原理、架構。更多內容可以去Kylin 官網進行了解.
