全量構建與增量構建
全量構建
對數據模型中沒有指定分割時間列信息的Cube,Kylin會採用全量構建,即每次從Hive中讀取全部的數據來開始構建。通常它適用於以下兩種情形。
事實表的數據不是按時間增長的。
事實表的數據比較小或更新頻率很低,全量構建不會造成太大的開銷。
增量構建
Kylin每次都會從Hive中讀取一個時間範圍內的數據,然後進行計算,並以一個Segment的形式進行保存。下次再構建的時候,會自動以上次結束的時間爲起點時間,再選擇新的終止時間進行構建。經過多次構建,Cube中將會有多個Segment依次按時間順序進行排列,如Seg-1,Seg-2,…,Seg-N。查詢的時候,Kylin會查詢一個或多個Segment然後再做聚合計算,以便返回正確的結果給請求者。
使用增量構建的好處是,每次只需要對新增數據進行計算,從而避免了對歷史數據進行重複計算。對於數據量很大的Cube,使用增量構建是非常有必要
增量構建引發的問題
歷史數據刷新
Cube構建完成以後,如果某些歷史數據發生了改動,那麼需要針對相應的Segment進行重新計算,這種構建稱爲刷新。刷新通常只針對增量構建的Cube而言,因爲全量構建的Cube只要重新全部構建就可以得到更新;而增量更新的Cube因爲有多個Segment,因此需要先選擇要刷新的Segment,然後再進行刷新。
在刷新的同時,Cube仍然可以被查詢,只不過返回的是陳舊數據。當Segment刷新完畢時,新的Segment會立即生效,查詢開始返回最新的數據。老Segment則成爲垃圾,等待回收。
Cube合併
隨着時間的遷移,Cube中可能會存在較多數量的Segment,使得查詢性能下降,並且會給HBase集羣管理帶來壓力。對此,需要適時地將一些Segment進行合併,將若干個小Segment合併成較大的Segment。
合併的好處具體如下:
1)合併相同的Key,從而減少Cube的存儲空間。
2)由於Segment減少了,因此可以減少查詢時的二次聚合,提高了查詢性能。
3)HTable的數量得以減少,更便於集羣的管理。
轉載於:https://my.oschina.net/u/2000675/blog/2999947