1. 程式人生 > >Apache Kylin原理學習之Cube的建立與Build

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的原理及優化。