Olap簡介
OLAP的歷史與基本概念
Olap全稱為在線聯(lián)機分析應(yīng)用,是一種對于多維數(shù)據(jù)分析查詢的解決方案。 典型的Olap應(yīng)用場景包括銷售、市場、管理等商務(wù)報表,預(yù)算決算,經(jīng)濟報表等等。
最早的Olap查詢工具是發(fā)布于1970年的Express,然而完整的Olap概念是在1993年由關(guān)系數(shù)據(jù)庫之父 Edgar F.Codd 提出,伴隨而來的是著名的“twelve laws of alt="物聯(lián)網(wǎng)" width="550" height="282" />
Kylin 的生態(tài)圈包括:
1.Kylin Core: Kylin 引擎的框架,查詢、任務(wù)、以及存儲引擎都集中于此,除此之外還包括一個REST 服務(wù)器來響應(yīng)各種客戶端請求。
2.擴展插件: 各種提供額外特性的插件,如安全認證、SSO等
3.完整性組件: Job管理器,ETL、監(jiān)控以及報警
4.交互界面: 基于Kylin Core之上的用戶交互界面
5.驅(qū)動: 提供了JDBC以及ODBC的連接方式
kylin Cube 多維數(shù)據(jù)的計算
Kylin的多維計算主要是體現(xiàn)在OLAP Cube的計算。Cube由多個Cuboid組合而成,Cuboid上的數(shù)據(jù)是原始數(shù)據(jù)聚合的數(shù)據(jù),因此創(chuàng)建Cube可以看作是在原始數(shù)據(jù)導(dǎo)入時做的一個預(yù)計算預(yù)處理的過程。Kylin的強大之處在于充分利用了Hadoop的MapReduce并行處理的能力,高效處理導(dǎo)入的數(shù)據(jù)。
Kylin的數(shù)據(jù)來自于Hive,并作為一個Hive的加速器希望最終的查詢SQL類似于直接在Hive上查詢。因此Kylin在建立Cube的時候需要從Hive獲取Hive表的元數(shù)據(jù)。雖然有建立Cube的過程,但是并不想對普通的查詢用戶暴露Cube的存在。
Kylin創(chuàng)建Cube的過程如下:

根據(jù)Cube定義的事實表以及維度表,利用Hive創(chuàng)建一張寬表
抽取事實表上的維度的distinct值,將事實表上的維度以字典樹方式壓縮編碼成目錄,將維度表以字典樹的方式編碼
利用MapReduce從第一步得到的寬表文件作為輸入,創(chuàng)建 N-Dimension cuboid,然后每次根據(jù)前一步的結(jié)果串行生成 N-1 cuboid, N-2 cuboid ... 0-Cuboid
根據(jù)生成的Cuboid數(shù)據(jù)量計算HTable的Region分割策略,創(chuàng)建HTable,將HFile導(dǎo)入進來
Kylin與傳統(tǒng)的OLAP一樣,無法應(yīng)對數(shù)據(jù)Update的情況(更新數(shù)據(jù)會導(dǎo)致Cube的失效,需要重建整個Cube)。面對每天甚至每兩個小時這樣固定周期的增量數(shù)據(jù),Kylin使用了一種增量Cubing技術(shù)來進行快速響應(yīng)。
Kylin的Cube可以根據(jù)時間段劃分成多個Segment。在Cube第一次Build完成之后會有一個Segment,在每次增量Build后會產(chǎn)生一個新的Segment。增量Cubing依賴已有的Cube Segments和增量的原始數(shù)據(jù)。增量Cubing的步驟和新建 Cube的步驟類似,Segment之間以時間段進行區(qū)分。
增量Cubing所需要面對的原始數(shù)據(jù)量更小,因此增量Cubing的速度時非??斓?。然而隨著Cube Segments的數(shù)目增加,一定程度上會影響到查詢的進行,所以在Segments數(shù)目到一定數(shù)量后可能需要進行Cube Segments的合并操作,合并是一個異步操作,并不會影響到正常的查詢服務(wù)。合并操作步驟如下:
1.遍歷指定的Cube Segment
2.合并維度字典目錄和維度表快照
3.利用MapReduce合并他們的 N-Dimension cuboid
4.將cuboid轉(zhuǎn)換成HFile,生成新的HTable,替代原有的多個HTable 實際上merge cube是合成了一個新的大的Cube Segment來替代,Merge操作是一個異步的在線操作,不會對前端的查詢業(yè)務(wù)產(chǎn)生影響。。
Kylin對傳統(tǒng)MOLAP的改進
Kylin Cube的存儲代價以及計算代價都是比較大的, 傳統(tǒng)OLAP的維度爆炸的問題Kylin也一樣會遇到。 Kylin提供給用戶一些優(yōu)化措施,包括減輕維度爆炸的問題,提高數(shù)據(jù)查詢效率等:
Cube 建模優(yōu)化:
1.Hierachy Dimension(層級維度)
2.Derived Dimension (衍生維度)
3.Group Dimensions (維度組)
4.Hierachy Dimension, 一系列具有層次關(guān)系的Dimension組成一個Hierachy, 比如年、月、日組成了一個Hierachy, 在Cube中,如果不設(shè)置Hierarchy, 會有 年、月、日、年月、年日、月日 6個cuboid, 但是設(shè)置了Hierarchy之后Cuboid增加了一個約束,希望低Level的Dimension一定要伴隨高Level的Dimension 一起出現(xiàn)。設(shè)置了Hierachy Dimension 能使得需要計算的維度組合減少一半。
5.Derived Dimension, 如果在某張維度表上有多個維度,那么可以將其設(shè)置為Derived Dimension, 在Kylin內(nèi)部會將其統(tǒng)一用維度表的主鍵來替換,以此來達到降低維度組合的數(shù)目,當然在一定程度上Derived Dimension 會降低查詢效率,在查詢時,Kylin使用維度表主鍵進行聚合后,再通過主鍵和真正維度列的映射關(guān)系做一次轉(zhuǎn)換,在Kylin內(nèi)部再對結(jié)果集做一次聚合后返回給用戶