前提:
安裝kylin之前,需要安裝hadoop2.0、hbase、hive,並且對版本有要求,可以參照官網鏈接
http://kylin.apache.org/cn/docs/install/index.html
我這邊用的版本為:
hadoop2.7.5
hbase1.4.1
hive2.3.2
安裝可以參考我前面的博客
kylin安裝:
wget http://www.apache.org/dyn/closer.cgi/kylin/apache-kylin-2.4.1/apache-kylin-2.4.1-bin-hbase1x.tar.gz -C /usr/local/src
tar -zxvf apache-kylin-2.4.1-bin-hbase1x.tar.gz
mv apache-kylin-2.4.1-bin /usr/local/kylin
加入到環境變量:
vim ~/.bashrc KYLIN_HOME=/usr/local/kylin PATH=$PATH:$KYLIN_HOME/bin #刷新環境變量 source ~/.bashrc
檢測kylin環境是否有問題:
/usr/local/kylin/bin/check-env.sh
啟動kylin:
/usr/local/kylin/bin/kylin.sh start
kylin登錄:
鏈接:192.168.1.99:7070/kylin/
用戶名:ADMIN
密碼:KYLIN
添加一個project:
添加完之后,選擇該project
同步hive表到kylin:
點擊之后,同步自己需要操作數據庫的表
構建一個model:
1. Models->new->New Model
2. Model Info
3. Data Model (添加 Fact Table)
其中Add Lookup Table可以做一些表與表之間的關聯,如同這種格式(以下我是同一張表進行join,Table Alias可以自己設置,不要重名)
4. 構建維度表
維度表是與事實表相對應的一種表;它保存了維度的屬性值,可以跟事實表做關聯;相當於將事實表上經常重復的屬性抽取、規范出來用一張表進行管理
選擇維度表的字段:
假如我現在要計算每天(datetime)各種頻道(channelid)下,不同節目(p1)對應的事件(eventid)的數量,其中datetime作為條件,其它三種為group by/order by必須字段,得這四種必須作為維度表中的字段,才能得到最后結果
5. 構建度量
說明:如果是上面只需得到數量(count),則measures不需要添加任何字段;
如果得到的結果需要涉及某個字段,如:需統計每天(datetime)各種頻道(channelid)下,不同節目(p1)對應的總收入(price),則需要把price字段添加進來(dimensions和measures都必須是事實表中的字段,還不能重復)
6. Settings
說明:主要是針對增量構建,其中事實表中需要有對應的日期字段,下圖中事實表SODA_REPORT有日期字段DATETIME(yyyyMMdd),格式需要對應一致;如果你還有時間字段並且需要添加,則如下圖所示:
其中還有過濾條件,如果我只需要eventid為101和102,則
最后保存即可
構建一個cube:
說明:對於N個維度來說,組合所有可能性共有2的N次方種。對於每一種維度的組合,將度量做聚合計算,然后將運算的結果保存為一個物化視圖,稱為Cuboid。所有維度組合的Cuboid作為一個整體,被稱為Cube。
如:xxx_report包含datetime/channeled/p1/eventid四個維度,那么所有維度的組合就有2的4次方,即16種,計算Cubiod,即按維度來聚合
Select channeled, eventid, p1, count(*) as c_count from xxx_report \
where datetime=’20180918’ group by channeled, eventid, p1
將計算的結果保存為物化視圖,所有Cuboid物化視圖的總稱就是Cube。
1. Cube Info
2. Dimensions
說明:增加你需要用到維度表的字段,我這里全選
3. Measures
說明:按默認求count就行,因為之前構建model的時候,measure(度量)我們沒有添加任何字段,如果前面添加過,我們可以用SUM、MAX、MIN等函數
4. Refresh Setting
說明:這一步主要是為增量構建cube設計的
Auto Merge Thresholds:自動合並小的segments到中等甚至更大的segment。如果不想合並,則刪除默認2個選項
Volatile Range:默認為0,會自動合並所有可能的cube segments,或者用“Auto Merge”將不會合並最新的[Volatile Range]天的cube segments
Retention Threshold:只會保存cube過去幾天的segment,舊的segment將會自動從頭部刪除,0表示不啟用這個功能
Partition State Date:cube的開始日期
5. Advanced Setting (高級設置)
說明:
Aggregation Groups: Cube 中的維度可以划分到多個聚合組中。默認 kylin 會把所有維度放在一個聚合組,當維度較多時,產生的組合數可能是巨大的,會造成 Cube 爆炸;如果你很好的了解你的查詢模式,那么你可以創建多個聚合組。在每個聚合組內,使用 “Mandatory Dimensions”, “Hierarchy Dimensions” 和 “Joint Dimensions” 來進一步優化維度組合。
Mandatory Dimensions: 必要維度,用於總是出現的維度。例如,如果你的查詢中總是會帶有 “ORDER_DATE” 做為 group by 或 過濾條件, 那么它可以被聲明為必要維度。這樣一來,所有不含此維度的 cuboid 就可以被跳過計算。(比如,Mandatory Dimensions設置為p1,所有不包含該維度p1的cuboid會被跳過計算,當我們查詢select channeled, count(*) from soda_report where datetime=’20180919’ group by channeled時,沒有現成的完全匹配的 Cuboid,Kylin 會通過在線計算的方式,從現有的 Cuboid 中計算出最終結果)
Hierarchy Dimensions: 層級維度,例如 “國家” -> “省” -> “市” 是一個層級;不符合此層級關系的 cuboid 可以被跳過計算,例如 [“省”], [“市”]. 定義層級維度時,將父級別維度放在子維度的左邊。
Joint Dimensions: 聯合維度,有些維度往往一起出現,或者它們的基數非常接近(有1:1映射關系)。例如 “user_id” 和 “email”。把多個維度定義為組合關系后,所有不符合此關系的 cuboids 會被跳過計算。
6. configuration Overwrites
說明:Kylin允許在Cube級別覆蓋部分kylin.properties中的配置,你可以在這里定義覆蓋的屬性,如果不需要,則Next
7. Overview(概述)
對cube進行build:
說明:build開始時間是在構建cube的時候設置,結束時間自己設置,等到下次build的時候,上次的end_date為這次的start_date
通過點擊monitor來查看build的進展情況,以下是我完成的增量build:
Kylin中Cube的Build過程,其實是將所有的維度組合事先計算,存儲於HBase中,以空間換時間,HTable對應的RowKey,就是各種維度組合,指標存在Column中,這樣,將不同維度組合查詢SQL,轉換成基於RowKey的范圍掃描,然后對指標進行匯總計算。
測試:
查看20180917當天,各種頻道(channelid)下,不同節目(p1)對應事件(eventid)的數量,如圖所示