Hudi系列19:Hudi寫入模式 一. Changelog 模式 二. Append 模式

一. Changelog 模式

如果希望 Hoodie 保留消息的所有變更(I/-U/U/D), 之後接上 Flink 引擎的有狀態計算實現全鏈路近實時數倉(增量計算), Hoodie 的 MOR 表通過行存 原生支持 保留消息的所有變更(format 層面的集成), 通過流讀MOR 表可以消費到所有的變更記錄。

1.1 WITH 參數

名稱 Required 默認值 說明
changelog.enabled false false 默認是關閉的,即UPSERT語義,所有的消息僅保證最後一條合併消息,中間的變更可能會被merge掉: 改爲true支持消費所有的變更

批(快照) 讀仍然會合並所有的中間結果, 不管 format 是否已經存儲中間的狀態。

開啓 changelog.enabled 參數後, 中間的變更也只是 Best Effort: 異步IDE壓縮任務會將中間變更合併成1條,所以如果流讀消費不夠及時,被壓縮後只能讀取到最後一條記錄。當然,通過調整壓縮的buffer時間可以預留一定的時間 buffer 給 reader, 比如調整壓縮比。

二. Append 模式

從 0.10 開始支持
對於INSERT模式:

  1. MOR 默認會 apply小文件策略: 會追加寫 avro log 文件
  2. COW 每次直接寫新的 parquet 文件,沒有小文件策略

Hudi 支持豐富的 Clustering 策略, 優化 INSERT 模式下的小文件問題。

2.1 Inline Clustering

只有 Copy On Write 表支持該模式

名稱 Required 默認值 說明
write.insert.cluster false false 是否在寫入時合併小文件,COW表默認insert寫不合並小文件,開啓參數後, 每次寫入會優先合併之前的小文件(不會去重), 吞吐會受影響

2.2 Async Clustering

從 0.12 開始支持

名稱 Required 默認值 說明
clustering.scheduler.enabled false false 是否在寫入時定時異步調度 clustering plan,默認關閉
clustering.delta_commits false 4 跳讀 clustering plan 的間隔 commits
clustering.async.enabled false false 是否異步執行 clustering plan,默認關閉
clustering.tasks false 4 Clustering task 執行併發
clustering.plan.strtegy.target.file.max.bytes false 102410241024 Clustering 單文件目標大小,默認1GB
clustering.plan.strategy.small.file.limit false 600 小於該大小的文件纔會參與clustering
clustering.plan.strategy.sort.columns false N/A 支持指定特殊的排序字段
clustering.plan.partition.filter.mode false NONE 支持 NONE: 不做限制 RECET DAYS:按時
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章