Apache Kylin Cube 的構建過程

2022-02-16 16:17:15 字數 1911 閱讀 2975

不多說,直接上乾貨!

1、 cube的物理模型

cube物理模型

如上圖所示,乙個常用的3維立方體,包含:時間、地點、產品。假如data cell 中存放的是產量,則我們可以根據時間、地點、產品來確定產量,同時也可以根據時間、地點來確定所有產品的總產量等。

apache kylin就將所有(時間、地點、產品)的各種組合實現算出來,data cell 中存放度量,其中每一種組合都稱為cuboid。估n維的資料最多有2^n個cuboid,不過kylin通過設定維度的種類,可以減少cuboid的數目。

2 、cube構建演算法介紹

2.1 逐層演算法(layer cubing)

我們知道,乙個n維的cube,是由1個n維子立方體、n個(n-1)維子立方體、n*(n-1)/2個(n-2)維子立方體、......、n個1維子立方體和1個0維子立方體構成,總共有2^n個子立方體組成,在逐層演算法中,按維度數逐層減少來計算,每個層級的計算(除了第一層,它是從原始資料聚合而來),是基於它上一層級的結果來計算的。

比如,[group by a, b]的結果,可以基於[group by a, b, c]的結果,通過去掉c後聚合得來的;這樣可以減少重複計算;當 0維度cuboid計算出來的時候,整個cube的計算也就完成了。

逐層演算法

演算法優點

演算法缺點

2 .2 快速cube演算法(fast cubing)

快速cube演算法(fast cubing)是麒麟團隊對新演算法的乙個統稱,它還被稱作「逐段」(by segment) 或「逐塊」(by split) 演算法。

快速cube演算法

與舊演算法相比,快速演算法主要有兩點不同

一輪mapreduce便會完成所有層次的計算,減少hadoop任務的調配。

子立方體生成樹的遍歷

上圖是乙個四維cube的完整生成樹;按照dfs的次序,在0維cuboid 輸出前的計算次序是 abcd -> bcd -> cd -> d -> , abcd, bcd, cd和d需要被暫存;在被輸出後,d可被輸出,記憶體得到釋放;在c被計算並輸出後,cd就可以被輸出; abcd最後被輸出。

4.3 、cube構建流程

cube構建流程圖

主要步驟如下:

構建乙個中間平表(hive table):將model中的fact表和look up表構建成乙個大的flat hive table。

重新分配flat hive tables。

從事實表中抽取維度的distinct值。

對所有維度表進行壓縮編碼,生成維度字典。

計算和統計所有的維度組合,並儲存,其中,每一種維度組合,稱為乙個cuboid。

建立htable。

構建最基礎的cuboid資料。

利用演算法構建n維到0維的cuboid資料。

構建cube。

將cuboid資料轉換成hfile。

將hfile直接載入到hbase table中。

更新cube資訊。

清理hive。

Apache Kylin Cube構建演算法

在介紹快速cube演算法之前,我們先簡單回顧一下現有的演算法,也稱之為 逐層演算法 by layer cubing 我們知道,乙個n維的完全cube,是由 1個n維子立方體 cuboid n個 n 1 維cuboid,n n 1 2個 n 2 維cuboid n個1維cuboid,1個0維cuboi...

mapbox testapp安卓專案構建過程

第一次寫部落格,但願這是乙個好的開始,我能一直堅持下去,說實話,做出來東西跟寫出來完全是不一樣的體驗。廢話不多說 絕對乾貨 直接上編譯步驟 compile project mapboxglandroidsdk 這段 的意思是引用本地module mapboxglandroidsdk 經驗證,這個sd...

一 通過 npm yarn 構建vue專案

環境要求 node.js vue vue cli 注意 md xx 建立xx資料夾 cd xx 進入xx資料夾 cd 返回上一級 g 是全域性的意思 install 安裝 uninstall 解除安裝 init 初始化 webpack 壓縮 一 通過 npm 構建vue專案 1 檢視nodejs版本...