摘要:增量構建 Cube 的定義必須包含一個時間維度,用來分割不同的 Segment,這樣的維度稱爲分割時間列(Partition Date Column)。增量構建的 Cube 需要指定分割時間列。

作者| Alice菌
責編 | 王曉曼
出品 | CSDN博客
Kylin增量構建應用場景
Kylin 在每次 Cube 的構建都會從 Hive 中批量讀取數據,而對於大多數業務場景來說,Hive 中的數據處於不斷增長的狀態。爲了支持 Cube 中的數據能夠不斷地得到更新,且無需重複地爲已經處理過的歷史數據構建 Cube,因此對於 Cube 引入了增量構建的功能。
1、理解 Cube、Cuboid 與 Segment 的關係
Kylin 將 Cube 劃分爲多個 Segment(對應就是 HBase 中的一個表),每個Segment 用起始時間和結束時間來標誌。Segment 代表一段時間內源數據的預計算結果。一個 Segment 的起始時間等於它之前那個 Segment 的結束時間,同理,它的結束時間等於它後面那個 Segment 的起始時間。同一個 Cube 下不同的 Segment 除了背後的源數據不同之外,其他如結構定義、構建過程、優化方法、存儲方式等都完全相同。
一個 Cube,可以包含多個 Cuboid,而 Segment 是指定時間範圍的 Cube,可以理解爲 Cube 的分區。對應就是 HBase 中的一張表,該表中包含了所有的 Cuboid 。
例如:以下爲針對某個Cube的Segment。
2、全量構建與增量構建
全量構建
在全量構建中,Cube 中只存在唯一的一個 Segment ,該 Segment 沒有分割時間的概念,也就沒有起始時間和結束時間。全量構建和增量構建各有其適用的場景,用戶可以根據自己的業務場景靈活地進行切換。對於全量構建來說,每當需要更新Cube數據的時候,它不會區分歷史數據和新加入的數據,也就是說,在構建的時候會導入並處理所有的原始數據。
增量構建
增量構建只會導入新 Segment 指定的時間區間內的原始數據,並只對這部分原始數據進行預計算。
全量構建與增量構建的Cube查詢方式對比:
(1)全量構建Cube

  • 查詢引擎只需向存儲引擎訪問單個 Segment 所對應的數據,無需進行 Segment 之間的聚合;

  • 爲了加強性能,單個 Segment 的數據也有可能被分片存儲到引擎的多個分區上,查詢引擎可能仍然需要對單個 Segment 不同分區的數據做進一步的聚合。

(2)增量構建 Cube
  • 由於不同時間的數據分佈在不同的 Segment 之中,查詢引擎需要向存儲引擎請求讀取各個 Segment 的數據;

  • 增量構建的 Cube 上的查詢會比全量構建的做更多的運行時聚合,通常來說增量構建的 Cube 上的查詢會比全量構建的 Cube 上的查詢要慢一些。

對於小數據量的 Cube,或者經常需要全表更新 Cube,使用全量構建需要更少的運維精力,以少量的重複計算降低生產環境中的維護複雜度。而對於大數據量的 Cube,例如,對於一個包含兩年曆史數據的 Cube,如果需要每天更新,那麼每天爲了新數據而去重複計算過去兩年的數據就會變得非常浪費,在這種情況下需要考慮使用增量構建。

增量構建 Cube 過程
1、指定分割時間列
增量構建 Cube 的定義必須包含一個時間維度,用來分割不同的 Segment,這樣的維度稱爲分割時間列(Partition Date Column)。
2、增量構建過程
  • 在進行增量構建時,將增量部分的起始時間和結束時間作爲增量構建請求的一部分提交給 Kylin 的任務引擎

  • 任務引擎會根據起始時間和結束時間從 Hive 中抽取相應時間的數據,並對這部分數據做預計算處理

  • 將預計算的結果封裝成爲一個新的 Segment ,並將相應的信息保存到元數據和存儲引擎中。一般來說,增量部分的起始時間等於 Cube 中最後一個 Segment 的結束時間。

增量Cube的創建
創建增量 Cube 的過程和創建普通 Cube 的過程基本類似,只是增量 Cube 會有一些額外的配置要求。
1、配置 Model
增量構建的 Cube 需要指定分割時間列。例如:將日期分區字段添加到維度列中
2、 設置日期範圍
創建 Cube 結束後,在 build 時設置計算數據的日期。
注意事項
注意構建 Cube 時,選擇的分區時間爲,起始時間(包含)、結束時間(不保存),對應了從 Hive 從獲取數據源的條件。
3、查看Segment
第一天同步成功
接着我們想再計算下一個日期的數據:
第二天同步成功
根據層量同步方案,得出一個結論:
每天生成一個 Segment,一年就有365個 Segment 。當用戶查詢時,系統不知道數據在哪個 Segment 中,所以需要掃描所有的 Segment(掃描356個表),掃描多個表/多個 Segment 會降低數據查詢效率。【增量方案帶來的問題】
補充:文件越多效率越慢。
  • 1個文件10G和10000個文件共10G 讀取一個文件更快(尋址開銷、頻繁發開關閉)

  • 一個文件夾內的文件特別多,這個文件夾打開的時間就會特別長。

  • 當系統越來越慢,越來越慢,越來越慢,越來越慢,有可能是某一個目錄中的數據沒有及時的清空或刪除。

總結
本篇文章爲大家介紹了 Kylin 的增量構建與全量構建的差異與適用場景分析,併爲演示瞭如何進行 Kylin 的增量構建。在文末的時候已經提到,增量構建會導致 Segment 文件越來越多,最終影響到系統的性能。
版權聲明:本文爲CSDN博主「Alice菌」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
相關文章