作者|張逸凡
編輯| Sammi
對(duì)Apache Kylin的用戶而言,如何設(shè)計(jì)并構(gòu)建滿足業(yè)務(wù)分析場(chǎng)景的Cube,是使用Kylin的基本要求。KyBot作為在線診斷、優(yōu)化及服務(wù)的平臺(tái),通過分析整合Kylin的日志等信息,為用戶提供可視化儀表盤、系統(tǒng)優(yōu)化、故障排查、技術(shù)支持等服務(wù),大大降低了Kylin的維護(hù)成本。
本文將介紹KyBot的評(píng)分系統(tǒng),幫助用戶調(diào)優(yōu)出一個(gè)建立高效可用的Kylin Cube。
Cube是OLAP系統(tǒng)用于數(shù)據(jù)索引、預(yù)計(jì)算的關(guān)鍵概念。對(duì)Apache Kylin的用戶而言,如何設(shè)計(jì)并構(gòu)建滿足業(yè)務(wù)分析場(chǎng)景的Cube,是使用Kylin的基本要求。隨著業(yè)務(wù)場(chǎng)景和數(shù)據(jù)特征的演變,用戶可能發(fā)現(xiàn)最初設(shè)計(jì)的Cube在查詢性能方面開始降低;或者在一些建模場(chǎng)景下,由于復(fù)雜查詢業(yè)務(wù)的需要,使得Cube的膨脹率變得很大,而這些問題,都可以通過對(duì)Cube調(diào)優(yōu)來解決。
對(duì)Kylin進(jìn)行深度調(diào)優(yōu),不僅需要對(duì)Kylin的運(yùn)行機(jī)制有深入的了解,更需要多種系統(tǒng)運(yùn)行狀態(tài)統(tǒng)計(jì)特征配合分析Cuboid和RowKey的使用情況,從歷史查詢模式中找到系統(tǒng)的瓶頸和優(yōu)化的方向。Kyligence公司為解決Kylin的有效運(yùn)維問題,設(shè)計(jì)了KyBot在線服務(wù),提供了相關(guān)分析工具,這些工具將極大簡(jiǎn)化上述問題。KyBot作為在線診斷、優(yōu)化及服務(wù)的平臺(tái),通過分析整合Kylin的日志等信息,為用戶提供可視化儀表盤、系統(tǒng)優(yōu)化、故障排查、技術(shù)支持等服務(wù),大大降低了Kylin的維護(hù)成本。
本文將介紹KyBot的評(píng)分系統(tǒng),幫助用戶調(diào)優(yōu)出一個(gè)建立高效可用的Kylin Cube。
進(jìn)入KyBot的Cube調(diào)優(yōu)頁面,首先是Cube診斷報(bào)告,評(píng)分欄中的5維雷達(dá)圖及各個(gè)評(píng)分項(xiàng)為Cube健康度給出了打分, 通常來說分?jǐn)?shù)越高,Cube越“健康”。

如圖所示,五個(gè)維指標(biāo)分別對(duì)應(yīng)為:
查詢性能:評(píng)價(jià)當(dāng)前Cube的查詢效率,用戶需求的重要參考因素之一,主要因子為查詢時(shí)間中間數(shù)等。
使用率:評(píng)價(jià)當(dāng)前Cube的訪問熱度,基于用戶的查詢行為統(tǒng)計(jì),主要因子為訪問此Cube 的查詢占總查詢?cè)L問數(shù)量的比重。
膨脹倍數(shù):評(píng)價(jià)當(dāng)前Cube的膨脹率,存儲(chǔ)和構(gòu)建方面需要關(guān)注的因素,主要因子為Cube數(shù)據(jù)存儲(chǔ)空間。
構(gòu)建性能:評(píng)價(jià)Cube的構(gòu)建時(shí)間,也從側(cè)面體現(xiàn)了設(shè)計(jì)的合理性,有時(shí)構(gòu)建時(shí)間過長(zhǎng)也是用戶的痛點(diǎn)之一。
模型設(shè)計(jì):評(píng)價(jià)使用角度下的Cube設(shè)計(jì),結(jié)合查詢使用記錄的綜合指標(biāo),主要因子為Row Key使用情況、Cuboid重合率,Cuboid匹配率等指標(biāo)。
例如,圖中的Cube“模型設(shè)計(jì)”得分較低,同時(shí)下方也提供了優(yōu)化建議來提醒用戶“模型設(shè)計(jì):? Cube設(shè)計(jì)不合理,會(huì)對(duì)構(gòu)建和查詢都造成影響,建議進(jìn)行調(diào)優(yōu)”。這樣我們便從前文介紹的影響因素入手。
我們?cè)贑ube詳細(xì)頁面中瀏覽層級(jí)信息,展開查看Cuboid樹下第一層級(jí)的8個(gè)子結(jié)點(diǎn),發(fā)現(xiàn)有6個(gè)結(jié)點(diǎn)的重合率超過了98%,比如第一個(gè)Cuboid (id=7679,二進(jìn)制表達(dá)為“1 1101 1111 1111”),和父節(jié)點(diǎn)相差YYYY和YYYYMM兩列,但重合率達(dá)98%,且行數(shù)超過了1千萬條。 這樣的結(jié)果便是Cube的膨脹率偏高,同時(shí)查詢效率也會(huì)偏慢。
通過查看各個(gè)維度的詳細(xì)信息, 不難發(fā)現(xiàn),該Cuboid排除的維度基數(shù)非常的低,YYYY和YYYYMM兩列雖然已是層級(jí)維度,但兩個(gè)維度的基數(shù)都很低,即使設(shè)成層級(jí)維度也會(huì)帶來很大的Cuboid重合度。

同樣的情況也出現(xiàn)在CATA1_ID和CATA2_ID組合中,這里可以考慮將他們(YYYY, YYYYMM, CATA1_ID和CATA2_ID)合并為一個(gè)聯(lián)合維度。

還有多個(gè)低基數(shù)列(LOCATION, TYPE和PIPE_ID)也有重合率高的問題,且沒有也沒有任何聚合組設(shè)置,同樣地,也應(yīng)進(jìn)行聯(lián)合維度合并。
這樣在大大減少Cube復(fù)雜度(28=>25)的前提下,有效地降低重合率,同時(shí)每個(gè)Cuboid本身也不會(huì)變得太臃腫,保證了查詢性能。
同時(shí),還有一個(gè)高基數(shù)列WORKER_ID被作為了必要維度,導(dǎo)致所有Cuboid都很大,可能造成不包含這一維度的查詢性能較差,所以設(shè)置必要維度時(shí)必須要謹(jǐn)慎。

基于以上發(fā)現(xiàn),我們就能很快地找到影響評(píng)價(jià)的原因。
那么是否每個(gè)cube的調(diào)優(yōu)目標(biāo)就是將評(píng)分雷達(dá)圖上的5維提高作為最終目標(biāo)呢。其實(shí)不然,首先,每個(gè)因素看似獨(dú)立,但是實(shí)際上相互影響著,比如提高查詢效率可能伴隨著構(gòu)建Cube成本的提高。
優(yōu)化的目的也是取決于用戶真正的需求,比如上文中的必要維度設(shè)置會(huì)對(duì)部分查詢性能有影響,在用戶的查詢需求中很少遇到這些查詢 ,而且最需要的訴求是降低膨脹率,大可以保留這個(gè)必要維度。Cube優(yōu)化的策略應(yīng)該隨實(shí)際需求傾斜,比如在Cube構(gòu)建速度可以接受的情況下,希望更多地提高查詢效率,相應(yīng)地以稍高的膨脹率為代價(jià)有時(shí)也能被接受。
反過來說,即使是“滿分”的Cube,也并不是表示優(yōu)化已經(jīng)到了極致,打分項(xiàng)也均為參考值,高分項(xiàng)也只是說明目前優(yōu)化的余地相對(duì)少一些,如果仍然有調(diào)整的需求,繼續(xù)優(yōu)化也是可行的。
Cube的評(píng)分雖然會(huì)隨業(yè)務(wù)發(fā)展而變動(dòng),而Cube調(diào)優(yōu)就是不斷保證Cube性能的有效手段。真正完美的Cube并不存在,設(shè)置該評(píng)分系統(tǒng)也是為了給用戶提供直觀的優(yōu)化建議和參考思路。
作者:
Yifan Zhang(張逸凡)高級(jí)軟件工程師@Kyligence,專注于大數(shù)據(jù)平臺(tái),物聯(lián)網(wǎng)和實(shí)時(shí)數(shù)據(jù)分析。