關於Cube碎片管理,你需要知道這些!

寫在前面: 博主是一名軟件工程系大數據應用開發專業大二的學生,暱稱來源於《愛麗絲夢遊仙境》中的Alice和自己的暱稱。作爲一名互聯網小白,寫博客一方面是爲了記錄自己的學習歷程,一方面是希望能夠幫助到很多和自己一樣處於起步階段的萌新。由於水平有限,博客中難免會有一些錯誤,有紕漏之處懇請各位大佬不吝賜教!個人小站:http://alices.ibilibili.xyz/ , 博客主頁:https://alice.blog.csdn.net/
儘管當前水平可能不及各位大佬,但我還是希望自己能夠做得更好,因爲一天的生活就是一生的縮影。我希望在最美的年華,做最好的自己

        在上一篇博客中,博主已經爲大家介紹瞭如何進行kylin的增量構建。在最後也討論了增量構建會導致Segment越來越多,進而降低數據查詢的效率。本篇博客,爲大家帶來的就是如何對Cube進行碎片化的管理

        碼字不易,先贊後看

在這裏插入圖片描述


Cube碎片管理

增量構建的問題

        日積月累,增量構建的Cube中的Segment越來越多,該Cube的查詢性能也會越來越慢,因爲需要在單點的查詢引擎中完成越來越多的運行時聚合。爲了保持查詢性能:

  • 需要定期地將某些Segment合併在一起
  • 或者讓Cube根據Segment保留策略自動地淘汰那些不會再被查詢到的陳舊Segment

管理Cube碎片

        上述案例,每天都會生成一個Segment,對應就是HBase中的一張表。增量構建的Cube每天都可能會有新的增量。這樣的Cube中最終可能包含上百個Segment,這將會導致Kylin性能受到嚴重的影響

  • 從執行引擎的角度來說,運行時的查詢引擎需要聚合多個Segment的結果才能返回正確的查詢結果
  • 從存儲引擎的角度來說,大量的Segment會帶來大量的文件,給存儲空間的多個模塊帶來巨大的壓力,例如Zookeeper、HDFS Namenode等

        因此,有必要採取措施控制Cube中Segment的數量

在這裏插入圖片描述

手動觸發合併Segment

        Kylin提供了一種簡單的機制用於控制Cube中Segment的數量:合併Segments。在Web GUI中選中需要進行Segments合併的Cube。

操作步驟:

1、單擊Action→Merge
在這裏插入圖片描述
2、選中需要合併的Segment,可以同時合併多個Segment,但是這些Segment必須是連續的
在這裏插入圖片描述
        單擊提交後系統會提交一個類型爲“MERGE”的構建任務,它以選中的Segment中的數據作爲輸入,將這些Segment的數據合併封裝成爲一個新的Segment。新的Segment的起始時間爲選中的最早的Segment的起始時間,它的結束時間爲選中的最晚的Segment的結束時間。

在這裏插入圖片描述

在這裏插入圖片描述
待到運行完畢,我們可以發現Cube內部的Segment文件已經合併爲一個
在這裏插入圖片描述

注意事項:

  • 在MERGE類型構建完成之前,系統將不允許提交這個Cube上任何類型的其他構建任務
  • 在MERGE構建結束之前,所有選中用來合併的Segment仍然處於可用的狀態
  • 當MERGE構建結束的時候,系統將選中合併的Segment替換爲新的Segment,而被替換下的Segment等待將被垃圾回收和清理,以節省系統資源

講完了合併Segment,我們來談談如何刪除Segment

刪除Segment

同樣的,我們也可以使用WebUI刪除Cube的segment

操作步驟:
1、disable Cube

在這裏插入圖片描述
2、點擊 delete Segment,刪除指定的segment
在這裏插入圖片描述

在這裏插入圖片描述
如果使用Postman發送請求刪除Segment

屬性
URL http://node1:7070/kylin/api/cubes/{cubeName}/segs/{segmentName}
請求方式 DELETE

自動合併

        手動維護Segment很繁瑣,人工成本很高,Kylin中是可以支持自動合併Segment。

        在Cube Designer的“Refresh Settings”的頁面中有:

  • Auto Merge Thresholds
  • Retention Threshold

在這裏插入圖片描述
兩個設置項可以用來幫助管理Segment碎片。這兩項設置搭配使用這兩項設置可以大大減少對Segment進行管理的麻煩。

1、Auto Merge Thresholds

  • 允許用戶設置幾個層級的時間閾值,層級越靠後,時間閾值就越大
  • 每當Cube中有新的Segment狀態變爲 READY的時候,會自動觸發一次系統自動合併
  • 合併策略

        達到了閾值就跳過,沒有達到閾值就合併到這個閾值,沒滿足不合並

        嘗試最大一級的時間閾值,例如:針對(7天、28天)層級的日誌,先檢查能否將連續的若干個Segment合併成爲一個超過28天的大Segment。

  • 如果有個別的Segment的時間長度本身已經超過28天,系統會跳過Segment
  • 如果滿足條件的連續Segment還不能夠累積超過28天,那麼系統會使用下一個層級的時間閾值重複尋找

        這裏爲了方便大家理解,舉一個例子

  • 假設自動合併閾值設置爲7天、28天
  • 如果現在有A-H8個連續的Segment,它們的時間長度爲28天(A)、7天(B)、1天(C)、1天(D)、1天(E)、1天(F)、1天(G)、1天(H)
  • 此時,第9個Segment I加入,時間長度爲1天

自動合併策略爲:
在這裏插入圖片描述

2、配置自動合併

首先設置閾值,可以使一個也可以使多個。
在這裏插入圖片描述
設置完Cube後,我們build進行構建,然後等待
在這裏插入圖片描述
在這裏插入圖片描述
運行完畢以後,生成一天的數據
在這裏插入圖片描述
接着我們提交下一個一天的數據(1014-1015)

在這裏插入圖片描述
待到構建完畢,我們可以發現新的Segment已經與之前的Segment合併了
在這裏插入圖片描述若設置多層次的合併級別,最好是每個層次之間是整倍數關係

既然能自動合併,那肯定有辦法自動刪除,接下來我們就來嘮嘮

自動刪除

        自動合併是將多個Segment合併爲一個Segment,以達到清理碎片的目的。自動刪除Segment則是及時清理不再使用的Segment。

        在很多場景中,只會對過去一段時間內的數據進行查詢,例如:

  • 對於某個只顯示過去1年數據的報表
  • 支撐它的Cube其實只需要保留過去一年類的Segment即可
  • 由於數據在Hive中已經存在備份,則無需在Kylin中備份超過一年的歷史數據

在這裏插入圖片描述
        可以將Retention Threshold設置爲365。每當有新的Segment狀態變爲READY的時候,系統會檢查每一個Segment。如果它的結束時間距離最晚的一個Segment的結束時間已經大於等於“Retention Threshold”,那麼這個Segment將被視爲無需保留。系統會自動地從Cube中刪除這個Segment。
在這裏插入圖片描述


總結

        本篇博客爲大家介紹瞭如何進行Cube的碎片化管理,包括手動合併,刪除,以及自動合併,刪除。下一篇博客,將爲大家介紹如何使用JDBC連接Kylin,敬請期待😎

        如果以上過程中出現了任何的紕漏錯誤,煩請大佬們指正😅

        受益的朋友或對大數據技術感興趣的夥伴記得點贊關注支持一波🙏

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章