KYLIN是什么熏矿?
上古神獸,直接上圖
- 可擴(kuò)展超快OLAP引擎:?
Kylin是為減少在Hadoop上百億規(guī)模數(shù)據(jù)查詢延遲而設(shè)計(jì)
- Hadoop ANSI SQL 接口:?
Kylin為Hadoop提供標(biāo)準(zhǔn)SQL支持大部分查詢功能
- 交互式查詢能力:?
通過(guò)Kylin,用戶可以與Hadoop數(shù)據(jù)進(jìn)行亞秒級(jí)交互夭问,在同樣的數(shù)據(jù)集上提供比Hive更好的性能
- 多維立方體(MOLAP Cube):
用戶能夠在Kylin里為百億以上數(shù)據(jù)集定義數(shù)據(jù)模型并構(gòu)建立方體
- 與BI工具無(wú)縫整合:
Kylin提供與BI工具烛卧,如Tableau,的整合能力缝彬,即將提供對(duì)其他工具的整合
- 其他特性:?
- Job管理與監(jiān)控?
- 壓縮與編碼?
- 增量更新?
- 利用HBase Coprocessor
- 基于HyperLogLog的Dinstinc Count近似算法?
- 友好的web界面以管理萌焰,監(jiān)控和使用立方體?
- 項(xiàng)目及立方體級(jí)別的訪問(wèn)控制安全
- 支持LDAP
Kylin的發(fā)展歷程
源自ebay上海團(tuán)隊(duì)
2014年10月開(kāi)源
2015年11月畢業(yè)
目前最高版本2.2 ,本次介紹的是1.5.1
前奏
事實(shí)表和維度表
事實(shí)表:事實(shí)表是記錄具體時(shí)間了谷浅,包含了每個(gè)事件的具體要素扒俯,以及具體發(fā)生的事情
維度表:是對(duì)事實(shí)表中事件的要素描述信息。
星型模型和雪花模型
星型模型是一張事實(shí)表對(duì)應(yīng)多張維度表
雪花模型一疯,顧名思義撼玄,事實(shí)表連接事實(shí)表再連接維度表
OLAP
聯(lián)機(jī)分析處理
OLAP的基本操作
鉆取(Drill-down)
上卷(Roll-up)
切片(Slice)
切塊(Dice)
旋轉(zhuǎn)(Pivot)
數(shù)據(jù)立方體 cube
舉例說(shuō)明墩邀,什么是cube掌猛,
cube是所有的dimensions組合,任一dimensions的組合稱為cuboid
kylin整體結(jié)構(gòu)
SQL查詢
支持大部分sql查詢眉睹。
cube 構(gòu)建完成后荔茬,sql先被翻譯成執(zhí)行計(jì)劃废膘,從這個(gè)計(jì)劃,可以執(zhí)照要查表兔院,怎么join殖卑,還有過(guò)濾條件等,去找cube坊萝,如果命中了cube孵稽,會(huì)被發(fā)送到存儲(chǔ)引擎,翻譯成scan操作十偶,
group by --cubeid
where 條件--開(kāi)始結(jié)束值
result 菩鲜,rowkey 反向編碼--dimesion值
value -- measure,
利用hbase列存儲(chǔ)特性惦积,
Cube的構(gòu)建
分為兩種 接校,全量構(gòu)建,增量構(gòu)建
全量構(gòu)建
事實(shí)表數(shù)據(jù)不是按照世間增長(zhǎng)的狮崩,
事實(shí)表的數(shù)據(jù)比較小蛛勉,或者更新頻率很低
增量構(gòu)建
有時(shí)間維度,構(gòu)建的時(shí)候要選取時(shí)間范圍
每次構(gòu)建睦柴,將生成一個(gè)segment
增量構(gòu)建
前提:必須要有一個(gè)時(shí)間維度诽凌,用來(lái)分割。
起始時(shí)間就是上一個(gè)cube的結(jié)束時(shí)間
1 model 層面的設(shè)置?
2 cube 層面的設(shè)置?
觸發(fā)增量創(chuàng)建
1 WEB
2 調(diào)用rest API
合并
將多個(gè)segment合并坦敌,起到減少segment的目的
1 手工合并
2 自動(dòng)合并
舉例
設(shè)置一個(gè)規(guī)則 一級(jí)28 二級(jí)7
A-28 B-7 C-1 D-1 E-1 F-1 G-1 H-1 如果此時(shí)加入一個(gè)I-1?
保留segment?
CUBE 優(yōu)化
Cube 維度優(yōu)化主要方式
· Cube ID 剪枝優(yōu)化
· 衍生維度優(yōu)化
· 聚合組優(yōu)化
· 強(qiáng)制維度
· 層次維度
· 聯(lián)合維度
· Cube并發(fā)粒度優(yōu)化
1 維度詛咒
????2 的n次方
2 檢查cubeid數(shù)量
./kylin.sh org.apache.kylin.engine.mr.common.CubeStatsReader cube_name
Statistics of test_cube[19700101000000_20170101000000]
Cube statistics hll precision: 14
Total cuboids: 3
Total estimated rows: 180
Total estimated size(MB):0.0013949871063232422
Sampling percentage:? 100
Mapper overlap ratio: 1.45
Mapper number: 0
Length of dimensionIDC_INFRASTRUCTURE_DB.HDFS_META.USERNAME is 1
Length of dimension IDC_INFRASTRUCTURE_DB.HDFS_META.GROUPNAMEis 1
|---- Cuboid 11, est row: 91, est MB: 0
???|---- Cuboid 01, est row: 43, est MB: 0, shrink: 47.25%
???|---- Cuboid 10, est row: 46, est MB: 0, shrink: 50.55%
----------------------------------------------------------------------------
(1)????首先看到Segment整體信息侣诵,Cube statistics hll precision指對(duì)Cube估計(jì)的大小精度,以及Cube中包含的Cuboid數(shù)量狱窘,對(duì)于此Cube中的Segment包含的總行數(shù)估計(jì)和Segment大小的估計(jì)值杜顺。這里需要說(shuō)明的是,Segment預(yù)估的大小會(huì)影響構(gòu)建Cube中的步驟蘸炸,比如常見(jiàn)的mapper和reducer數(shù)量躬络,數(shù)據(jù)split大小等。
(2)????接著可以看到所有Cuboid的詳細(xì)信息幻馁,其結(jié)果以樹(shù)結(jié)構(gòu)的方式羅列出來(lái)洗鸵。每個(gè)節(jié)點(diǎn)代表一個(gè)Cuboid,每個(gè)Cuboid都是由一連串的0或1的數(shù)字組成仗嗦,數(shù)字串的長(zhǎng)度等于有效維度的數(shù)量膘滨,從左到右的每個(gè)數(shù)字依次代表Rowkeys設(shè)置中的各個(gè)維度。如果數(shù)字為0稀拐,則代表這個(gè)Cuboid中不存在相應(yīng)的維度火邓;如果數(shù)字為1,則代表這個(gè)Cuboid中存在相應(yīng)的維度。我們也可以看到铲咨,除了最頂端的Cuboid之外躲胳,每個(gè)Cuboid都有一個(gè)父Cuboid,且都比父Cuboid少了一個(gè)“1”纤勒,也就是比父Cuboid少一個(gè)維度坯苹。
(3)????最頂端的父Cuboid為Base Cuboid,它直接由源數(shù)據(jù)計(jì)算而來(lái)摇天,包含所有的維度粹湃。
(4)????對(duì)于每層的Cuboid還有其他的統(tǒng)計(jì)信息,包括Cuboid行數(shù)的估計(jì)值泉坐,該Cuboid大小的估計(jì)值为鳄,以及此Cuboid的行數(shù)與父Cuboid的對(duì)比值(即Shrink值)。
3.??????檢查Cube大小
在Kylin的Web GUI的Model頁(yè)面中腕让,我們可以選擇一個(gè)READY狀態(tài)的Cube孤钦,將鼠標(biāo)移到該Cube的Cube Size列時(shí),會(huì)提示Cube的源數(shù)據(jù)大小纯丸,以及當(dāng)前Cube的大小除以源數(shù)據(jù)大小的比例偏形,稱為膨脹率(Expansion Rate)。
一般來(lái)說(shuō)觉鼻,Cube的膨脹率應(yīng)該在0% ~ 1000%之間壳猜,如果有個(gè)Cube的膨脹率超過(guò)1000%,那么Cube管理員就應(yīng)該查找原因了滑凉,通常原因有以下幾個(gè)方面:
1)、Cube的維度數(shù)量較多喘帚,沒(méi)有進(jìn)行很好的剪枝畅姊;
2)、Cube中存在較高基數(shù)的維度吹由,導(dǎo)致這類(lèi)維度每個(gè)Cuboid占用的空間很大若未,從而造成Cube體積變大;
3)倾鲫、存在比較占用空間的度量粗合。
對(duì)于Cube膨脹率高的情況,需要針對(duì)實(shí)際的業(yè)務(wù)需求進(jìn)行分析乌昔,可以考慮通過(guò)下面的幾種優(yōu)化方式進(jìn)行優(yōu)化:
[Derived Dim]衍生維度優(yōu)化
衍生維度(Derived Dim):當(dāng)一個(gè)或者多個(gè)維度能夠從主鍵中推斷出來(lái)隙疚,那么這些維度列就稱之為衍生“Derived” 列。
衍生維度(Derived Dim)優(yōu)化效果:維度表中的n個(gè)維度計(jì)算磕道,將Cuboid從2^n 減為2供屉。
使用場(chǎng)景:在星型模型中,有一個(gè)用戶維度表,表中包含了ID伶丐,A悼做,B,C 哗魂,其中ID 為PK肛走,在這里通過(guò)ID的值就可以確定A,B录别,C的值朽色,因?yàn)锳,B庶灿,C為ID的Derived纵搁。當(dāng)進(jìn)行build一個(gè)Cube包含A,B往踢,C 的時(shí)候腾誉,只需要包含ID,并且將A峻呕,B利职,C標(biāo)記為derived ,這樣derived列就不會(huì)生成Cuboid 瘦癌。
[Aggregation Group]聚合組優(yōu)化
聚合組(Aggregation Group): 根據(jù)業(yè)務(wù)的維度組合猪贪,劃分出具有強(qiáng)依賴的組合,這些組合稱之為聚合組讯私,在聚合組內(nèi)热押,維度之間的組合會(huì)預(yù)計(jì)算,聚合組之間并不交叉預(yù)計(jì)算斤寇,從而減少Cuboid的數(shù)量.
聚合組優(yōu)化效果:如果有4個(gè)維度桶癣,分別為A,B娘锁,C牙寞,D,那么就會(huì)有16個(gè)Cuboid莫秆,如果AB和CD分別為聚集組的話间雀,那么Cuboid的數(shù)量就縮減為8個(gè)。
使用場(chǎng)景:所有維度中镊屎,有部分維度之間具有聚合操作的惹挟,可以將這些維度放在一個(gè)聚合組內(nèi)。不放在聚合組里面的杯道,就直接進(jìn)行Base Cube操作匪煌。
[Mandatory Dimensions]強(qiáng)制維度
強(qiáng)制維度(Mandatory Dimensions):所有Cubeid中都包含的維度稱之為強(qiáng)制維度责蝠,不包含強(qiáng)制維度的Cubeid不會(huì)計(jì)算。
優(yōu)化效果:只計(jì)算包含強(qiáng)制維度的Cubeid萎庭,Cubeid的數(shù)量會(huì)縮減一半霜医。
使用場(chǎng)景:假如有三個(gè)維度A,B驳规,C肴敛,那么Cuboid就會(huì)有8個(gè),分別為ABC吗购,AB医男,BC,AC捻勉,A镀梭,B,C踱启,這時(shí)將A設(shè)置為強(qiáng)制維度报账,那么就只會(huì)計(jì)算ABC,AB埠偿,AC透罢,A這四個(gè) Cubeid。
[Hierarchy Dimension]層次維度
層次維度(Hierarchy Dim):某些維度之間具有上下層次關(guān)聯(lián)冠蒋。
優(yōu)化效果:如果有三個(gè)維度A羽圃,B,C 設(shè)置為層次維度抖剿,那么Cuboid數(shù)量將由2^3減為3+1朽寞。
使用場(chǎng)景:比較適用于進(jìn)行下鉆分析,比如年月日斩郎,省市縣這種愁憔。
[Joint Dimension]聯(lián)合維度
聯(lián)合維度(Joint Dimension):固定用來(lái)分組的維度查詢。
優(yōu)化效果:將多個(gè)維度優(yōu)化到一個(gè)維度孽拷。
使用場(chǎng)景:假如有ABC三個(gè)維度,但是在查詢的時(shí)候只會(huì)出現(xiàn)Group by A半抱,B脓恕,C,而不會(huì)出現(xiàn)Group A窿侈,Group by B炼幔,Group by A、B等等這種情況史简,那么就可以將A乃秀,B,C設(shè)置為聯(lián)合維度。
調(diào)整Cube并發(fā)粒度
當(dāng)Segment中某個(gè)Cuboid的大小超出一定的閾值時(shí)跺讯,系統(tǒng)會(huì)將該Cuboid的數(shù)據(jù)分片到多個(gè)Hbase Region Server枢贿,從而實(shí)現(xiàn)Cuboid數(shù)據(jù)讀取的并行化,優(yōu)化Cube的查詢速度刀脏。
kylin的默認(rèn)設(shè)置中
kylin.storage.hbase.region-cut-gb=5局荚,
kylin.storage.hbase.min-region-count=1,
kylin.storage.hbase.max-region-count=500
在實(shí)際應(yīng)用中(根據(jù)實(shí)際數(shù)據(jù)量調(diào)整),可以將
kylin.storage.hbase.region-cut-gb=1
kylin.storage.hbase.min-region-count=2,
kylin.storage.hbase.max-region-count=100愈污,
上面設(shè)置為最小為2個(gè)分區(qū)耀态,每個(gè)分區(qū)大小為1G,最多設(shè)置100個(gè)region分區(qū)暂雹。
ROWKEY的優(yōu)化
1 編碼
kylin有以下幾種編碼方式
Date
time
integer
Dict
Fixedlength
2 調(diào)整rowkey的順序
在查詢中被用作過(guò)濾條件的維度放在其他維度前面
經(jīng)常出現(xiàn)的維度放在前面
基數(shù)較高的放在前面