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:按时
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章