kylin對接hive實現實時查詢


 前提

安裝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)的數量,如圖所示

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM