Apache Kylin原理学习之Cube的创建与Build
原文地址:http://lxw1234.com/archives/2016/05/655.htm
Cube是一種典型的多維數據分析技術,一個Cube可以有多個事實表,多個維表構成。如果您還不了解這些概念,建議您搜索下數據倉庫、OLAP、Cube、星型模型、事實表、維度表等等。比如一個簡單例子,分析網站流量的Cube,包含一個事實表和四個維度表:
事實表可能有以下字段:
天、來源ID、瀏覽器ID、操作系統ID、PV、PageNumber等等;
其中,小時、來源ID、瀏覽器ID、操作系統ID 為維度;
PV、PageNumber為指標;
一般事實表中的維度都采用外鍵ID的形式,一來可以節省存儲,也可以很好的適用于其他分析工具;
維度表包括:
時間維表:年、月、日,其中天為最細粒度,也為該表主鍵;
訪問來源維表:來源ID、來源名稱;
瀏覽器維表:瀏覽器ID、瀏覽器名稱、etc.
操作系統維表:操作系統ID、操作系統名稱、etc.
事實表中的維度,分別與這四張維度表,通過主外鍵的方式關聯。
Kylin中的Cube亦是這種模型。
創建Cube
之前的文章《分布式大數據多維分析(OLAP)引擎Apache Kylin安裝配置及使用示例》介紹過在Kylin中定義數據模型和Cube。
Build Cube
定義好Cube之后,Apache Kylin通過MapReduce,將存儲在Hive中的事實表和維度表,轉換成Cube,存儲在HBase中,以實現快速分析查詢,整個過程如下圖所示:
kylin
STEP1. 根據Cube定義的事實表和維度,在Hive中生成一張中間表;
Create Intermediate Flat Hive Table;
STEP2. 使用MapReduce,從事實表中抽取維度的Distinct值,并以字典樹的方式壓縮編碼,同時也對所有維度表進行壓縮編碼,生成維度字典;
Extract Fact Table Distinct Columns
Build Dimension Dictionary
STEP3. 計算和統計所有的維度組合,并保存,其中,每一種維度組合,稱為一個Cuboid,后面會詳細介紹。
Save Cuboid Statistics
STEP4. 創建HBase Table;
Create HTable
STEP5. 利用step1中間表的數據,使用MapReduce,生成每一種維度組合(Cuboid)的數據;
Build Base Cuboid Data;
Build N-Dimension Cuboid Data : 7-Dimension;
Build N-Dimension Cuboid Data : 6-Dimension;
。。。。。。
Build N-Dimension Cuboid Data : 2-Dimension;
Build Cube;
STEP6. 將Cuboid數據轉換成HFile,并導入到HBase Table中:
Convert Cuboid Data to HFile;
Load HFile to HBase Table;
STEP7. 更新Cube信息,清理中間表:
Update Cube Info;
Garbage Collection;
整個Build過程結束。
關于維度組合Cuboid
Kylin中Cube的Build過程,其實是將所有的維度組合事先計算,存儲于HBase中,以空間換時間,HTable對應的RowKey,就是各種維度組合,指標存在Column中,這樣,將不同維度組合查詢SQL,轉換成基于RowKey的范圍掃描,然后對指標進行匯總計算。
理論上來說,一個N維的Cube,便有2的N次方種維度組合,參考網上的一個例子,一個Cube包含time, item, location, supplier四個維度,那么組合(Cuboid)便有16種:
kylin
一個Cube中,當維度數量N超過一定數量后,空間以及計算消耗將會非常大,Kylin在定義Cube時候,可以將維度拆分成多個聚合組(Aggregation Groups),只在組內計算Cube,聚合組內查詢效率高,跨組查詢效率較差,所以需要根據業務場景,將常用的維度組合定義到一個聚合組中,提高查詢性能,這也是Kylin中查詢性能優化的一個重要方面。
后續將繼續學習Kylin的原理及優化。
總結
以上是生活随笔為你收集整理的Apache Kylin原理学习之Cube的创建与Build的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 正在搜索需要的文件_【数澜发布-澜寻】智
- 下一篇: 将视图转为image_使用视图绑定替代