作者:李棟
編輯:Sammi
眾所周知半开,Apache Kylin基于預(yù)計(jì)算的思想蝙寨,實(shí)現(xiàn)了在Hadoop上對(duì)PB規(guī)模數(shù)據(jù)集進(jìn)行高速OLAP分析的需求,查詢性能可以達(dá)到秒級(jí)甚至亞秒級(jí)守呜。既然是預(yù)計(jì)算粱玲,勢(shì)必需要占用一定的集群存儲(chǔ)資源;如果使用不當(dāng)昧旨,可能造成大量的資源浪費(fèi)拾给。如何優(yōu)化存儲(chǔ)資源占用,就是本文討論的話題。
關(guān)于存儲(chǔ)資源
Apache Kylin使用“空間換時(shí)間”極大提高了查詢效率。但“空間”也并非無限夭禽,不能無節(jié)制使用祟峦;而且需要的存儲(chǔ)越多,生成數(shù)據(jù)消耗的預(yù)計(jì)算時(shí)間和計(jì)算資源就越多福压,維護(hù)成本也越大。因此,在保持查詢效率不變的前提下入偷,減少存儲(chǔ)占用顯得尤為重要。
Apache Kylin對(duì)于存儲(chǔ)資源的占用主要包括以下幾個(gè)方面:
元數(shù)據(jù):包含Cube械哟、Model等的定義信息疏之,以及構(gòu)建任務(wù)、字典暇咆、維表鏡像等锋爪;默認(rèn)保存在HBase當(dāng)中
Cube數(shù)據(jù):即預(yù)計(jì)算的結(jié)果;默認(rèn)保存在HBase當(dāng)中
HDFS文件:Cube構(gòu)建任務(wù)生成的中間文件爸业,主要用于Segment合并等操作其骄;默認(rèn)保存在Apache Kylin的HDFS工作目錄當(dāng)中
Hive表:Cube構(gòu)建時(shí)為了從數(shù)據(jù)源拉取數(shù)據(jù)生成的臨時(shí)外表,數(shù)據(jù)默認(rèn)保存在Apache Kylin的HDFS工作目錄當(dāng)中扯旷,一般會(huì)在任務(wù)完成時(shí)自動(dòng)刪除
想要優(yōu)化存儲(chǔ)拯爽,首先需要了解整體及各項(xiàng)資源的存儲(chǔ)分布,進(jìn)而找到資源瓶頸和優(yōu)化方案钧忽。但是Apache Kylin中沒有存儲(chǔ)監(jiān)控和匯總統(tǒng)計(jì)的功能毯炮,想要快速洞悉存儲(chǔ)占用并不是那么容易——而KyBot擅長(zhǎng)解決這一問題。
使用KyBot優(yōu)化存儲(chǔ)
KyBot?(https://kybot.io)?是為Apache Kylin及其商業(yè)版KAP提供在線診斷耸黑、優(yōu)化及服務(wù)的平臺(tái)桃煎。通過分析Apache Kylin的日志等信息,為用戶提供可視化儀表盤大刊、系統(tǒng)優(yōu)化备禀、故障排查、知識(shí)庫(kù)等自助式服務(wù)。關(guān)于KyBot的使用可以參考文章[1]曲尸。
登錄進(jìn)入KyBot后赋续,通過左側(cè)菜單進(jìn)入“存儲(chǔ)”儀表盤,即可看到整個(gè)系統(tǒng)的存儲(chǔ)統(tǒng)計(jì)指標(biāo)另患,如圖1所示纽乱。
在圖1中,A區(qū)域代表整個(gè)HBase存儲(chǔ)的統(tǒng)計(jì)昆箕,在這個(gè)例子中總共使用了1.3 TB的空間鸦列,其中48.5 GB是元數(shù)據(jù),共計(jì)35個(gè)HTable鹏倘。通過這些統(tǒng)計(jì)薯嗤,管理員可以直觀掌握Kylin的存儲(chǔ)用量,也能為集群擴(kuò)容纤泵、運(yùn)維計(jì)劃提供數(shù)據(jù)支撐骆姐。
B區(qū)域代表HBase存儲(chǔ)用量的變化趨勢(shì),幫助用戶快速定位用量突變等異常情況捏题。這里的采樣時(shí)間是用戶每次生成KyBot診斷包的時(shí)間玻褪,因此,用戶只需要定期生成并上傳診斷包(如每日一次)公荧,就可以在此處觀測(cè)到完整的存儲(chǔ)變化曲線带射。
C區(qū)域代表檢測(cè)出的可清理項(xiàng)統(tǒng)計(jì),幫助管理員明確存儲(chǔ)健康程度循狰,并合理安排運(yùn)維任務(wù)窟社。在這個(gè)例子中,通過數(shù)據(jù)清理可以回收291.3 GB空間绪钥。
通過這些儀表盤桥爽,管理員可以一目了然地了解存儲(chǔ)占用情況,但是如果發(fā)現(xiàn)用量過高昧识,該如何優(yōu)化呢?下文將列出一些常見的優(yōu)化方案盗扒。
數(shù)據(jù)清理
在Apache Kylin的運(yùn)行過程當(dāng)中跪楞,會(huì)產(chǎn)生一定的中間數(shù)據(jù),這些數(shù)據(jù)有的會(huì)在使用后自動(dòng)刪除侣灶,有的會(huì)保留下來作為數(shù)據(jù)備份甸祭。隨著使用越來越久,這些數(shù)據(jù)的價(jià)值也越來越低褥影,管理員可以通過數(shù)據(jù)清理回收這些數(shù)據(jù)的空間池户。
可清理的數(shù)據(jù)包括元數(shù)據(jù)、Cube數(shù)據(jù)⌒=梗可清理的元數(shù)據(jù)主要包括很久之前的構(gòu)建任務(wù)描述赊抖、無用的字典和維表鏡像等,數(shù)據(jù)過多可能導(dǎo)致頁面加載過慢寨典、內(nèi)存占用過多等問題氛雪。如果A區(qū)域表示的元數(shù)據(jù)表過大,則需要進(jìn)行元數(shù)據(jù)清理耸成,清理方式參考文章[2]报亩。
當(dāng)用戶清空一個(gè)Cube時(shí),系統(tǒng)并不會(huì)把Cube數(shù)據(jù)立即刪除井氢,而只是更新了Cube元數(shù)據(jù)弦追。這是為了當(dāng)用戶操作失誤時(shí),還可以通過恢復(fù)元數(shù)據(jù)快速回滾花竞;當(dāng)用戶不再需要回滾劲件,這些數(shù)據(jù)就可以被清理;同樣的還有任務(wù)中斷留下的Hive中間表等等左胞。C區(qū)域表示的“可清理項(xiàng)”統(tǒng)計(jì)過大寇仓,則表示需要進(jìn)行存儲(chǔ)清理,清理方式參考文章[3]烤宙。
降低Cube膨脹率
存儲(chǔ)中最具重量級(jí)的就是Cube數(shù)據(jù)遍烦,如果發(fā)現(xiàn)總體存儲(chǔ)用量異常之大,那么極有可能是有個(gè)別Cube極度膨脹導(dǎo)致躺枕。
切換至KyBot的Cube儀表盤查看“Cube膨脹倍數(shù)統(tǒng)計(jì)”圖表服猪,如圖2所示,可以快速根據(jù)膨脹倍數(shù)找到最為異常的Cube拐云,并進(jìn)入Cube調(diào)優(yōu)頁面罢猪,觀察“Cuboid重合率”圖表:
如圖3所示,每根柱子代表一個(gè)Cuboid和父級(jí)Cuboid的重合率叉瘩,重合率100%則代表當(dāng)前Cuboid是冗余的膳帕,可以被刪除。圖3中的Cube有很多冗余Cuboid薇缅,說明該Cube有很大優(yōu)化空間危彩,即可以通過調(diào)整Cube設(shè)計(jì)減小冗余Cuboid,從而降低膨脹率泳桦,進(jìn)而有效減小系統(tǒng)的存儲(chǔ)資源用量汤徽,同時(shí)不影響查詢性能。有關(guān)Cuboid重合率和Cube優(yōu)化方案灸撰,請(qǐng)參考文章[4]谒府,本文不再贅述拼坎。
總結(jié)
“空間換時(shí)間”是Apache Kylin在大數(shù)據(jù)分析領(lǐng)域的殺手锏,為了讓它永久鋒利完疫,就需要通過不斷優(yōu)化進(jìn)行“保養(yǎng)”泰鸡,如存儲(chǔ)優(yōu)化、模型優(yōu)化等等趋惨。KyBot是專業(yè)鸟顺、智能的“保養(yǎng)顧問”,可以達(dá)到事半功倍的效果器虾。如果你也有存儲(chǔ)方面的困擾讯嫂,不妨參考本文一試。
參考文章
[2] 元數(shù)據(jù)清理
[3] 存儲(chǔ)清理