作者:李棟

編輯:Sammi

眾所周知,Apache Kylin基於預計算的思想,實現了在Hadoop上對PB規模數據集進行高速OLAP分析的需求,查詢性能可以達到秒級甚至亞秒級。既然是預計算,勢必需要佔用一定的集群存儲資源;如果使用不當,可能造成大量的資源浪費。如何優化存儲資源佔用,就是本文討論的話題。

關於存儲資源

Apache Kylin使用「空間換時間」極大提高了查詢效率。但「空間」也並非無限,不能無節制使用;而且需要的存儲越多,生成數據消耗的預計算時間和計算資源就越多,維護成本也越大。因此,在保持查詢效率不變的前提下,減少存儲佔用顯得尤為重要。

Apache Kylin對於存儲資源的佔用主要包括以下幾個方面:

· 元數據:包含Cube、Model等的定義信息,以及構建任務、字典、維表鏡像等;默認保存在HBase當中

· Cube數據:即預計算的結果;默認保存在HBase當中

· HDFS文件:Cube構建任務生成的中間文件,主要用於Segment合併等操作;默認保存在Apache Kylin的HDFS工作目錄當中

· Hive表:Cube構建時為了從數據源拉取數據生成的臨時外表,數據默認保存在Apache Kylin的HDFS工作目錄當中,一般會在任務完成時自動刪除

想要優化存儲,首先需要了解整體及各項資源的存儲分布,進而找到資源瓶頸和優化方案。但是Apache Kylin中沒有存儲監控和匯總統計的功能,想要快速洞悉存儲佔用並不是那麼容易——而KyBot擅長解決這一問題。

使用KyBot優化存儲

KyBot是為Apache Kylin及其商業版KAP提供在線診斷、優化及服務的平台。通過分析Apache Kylin的日誌等信息,為用戶提供可視化儀錶盤、系統優化、故障排查、知識庫等自助式服務。關於KyBot的使用可以參考文章[1]。

登錄進入KyBot後,通過左側菜單進入「存儲」儀錶盤,即可看到整個系統的存儲統計指標,如圖1所示。

圖 1 存儲儀錶盤

在圖1中,A區域代表整個HBase存儲的統計,在這個例子中總共使用了1.3 TB的空間,其中48.5 GB是元數據,共計35個HTable。通過這些統計,管理員可以直觀掌握Kylin的存儲用量,也能為集群擴容、運維計劃提供數據支撐。

B區域代表HBase存儲用量的變化趨勢,幫助用戶快速定位用量突變等異常情況。這裡的採樣時間是用戶每次生成KyBot診斷包的時間,因此,用戶只需要定期生成並上傳診斷包(如每日一次),就可以在此處觀測到完整的存儲變化曲線。

C區域代表檢測出的可清理項統計,幫助管理員明確存儲健康程度,併合理安排運維任務。在這個例子中,通過數據清理可以回收291.3 GB空間。

通過這些儀錶盤,管理員可以一目了然地了解存儲佔用情況,但是如果發現用量過高,該如何優化呢?下文將列出一些常見的優化方案。

數據清理

在Apache Kylin的運行過程當中,會產生一定的中間數據,這些數據有的會在使用後自動刪除,有的會保留下來作為數據備份。隨著使用越來越久,這些數據的價值也越來越低,管理員可以通過數據清理回收這些數據的空間。

可清理的數據包括元數據、Cube數據。可清理的元數據主要包括很久之前的構建任務描述、無用的字典和維表鏡像等,數據過多可能導致頁面載入過慢、內存佔用過多等問題。如果A區域表示的元數據表過大,則需要進行元數據清理,清理方式參考文章[2]。

當用戶清空一個Cube時,系統並不會把Cube數據立即刪除,而只是更新了Cube元數據。這是為了當用戶操作失誤時,還可以通過恢復元數據快速回滾;當用戶不再需要回滾,這些數據就可以被清理;同樣的還有任務中斷留下的Hive中間表等等。C區域表示的「可清理項」統計過大,則表示需要進行存儲清理,清理方式參考文章[3]。

降低Cube膨脹率

存儲中最具重量級的就是Cube數據,如果發現總體存儲用量異常之大,那麼極有可能是有個別Cube極度膨脹導致。

圖 2 Cube膨脹倍數統計

切換至KyBot的Cube儀錶盤查看「Cube膨脹倍數統計」圖表,如圖2所示,可以快速根據膨脹倍數找到最為異常的Cube,並進入Cube調優頁面,觀察「Cuboid重合率」圖表:

圖 3 Cuboid重合率統計

如圖3所示,每根柱子代表一個Cuboid和父級Cuboid的重合率,重合率100%則代表當前Cuboid是冗餘的,可以被刪除。圖3中的Cube有很多冗餘Cuboid,說明該Cube有很大優化空間,即可以通過調整Cube設計減小冗餘Cuboid,從而降低膨脹率,進而有效減小系統的存儲資源用量,同時不影響查詢性能。有關Cuboid重合率和Cube優化方案,請參考文章[4],本文不再贅述。

總結

「空間換時間」是Apache Kylin在大數據分析領域的殺手鐧,為了讓它永久鋒利,就需要通過不斷優化進行「保養」,如存儲優化、模型優化等等。KyBot是專業、智能的「保養顧問」,可以達到事半功倍的效果。如果你也有存儲方面的困擾,不妨參考本文一試。

參考文章

[1] KyBot快速入門指南 kyligence.io/?

[2] 元數據清理 kylin.apache.org/docs21

[3] 存儲清理 kylin.apache.org/docs21

[4] Apache

Kylin 深入Cube和查詢優化 geek.csdn.net/news/deta
推薦閱讀:
相关文章