更新时间:2024-12-25 GMT+08:00
离线Compaction配置
对于MOR表的实时业务,通常设置在写入中同步生成compaction计划,因此需要额外通过DataArts或者脚本调度SparkSQL去执行已经产生的compaction计划。
- 执行参数
set hoodie.compact.inline = true; //打开compaction操作 set hoodie.run.compact.only.inline = true; //compaction只执行已生成的计划,不产生新计划 set hoodie.cleaner.commits.retained = 120; // 清理保留120个commit set hoodie.keep.max.commits = 140; // 归档最大保留140个commit set hoodie.keep.min.commits = 121; // 归档最小保留121个commit set hoodie.clean.async = false; // 打开异步清理 set hoodie.clean.automatic = false; // 关闭自动清理,防止compaction操作触发clean run compaction on $tablename; // 执行compaction计划 run clean on $tablename; // 执行clean操作清理冗余版本 run archivelog on $tablename; // 执行archivelog合并清理元数据文件
- 关于清理、归档参数的值不宜设置过大,会影响Hudi表的性能,通常建议:
- hoodie.cleaner.commits.retained = compaction所需要的commit数的2倍
- hoodie.keep.min.commits = hoodie.cleaner.commits.retained + 1
- hoodie.keep.max.commits = hoodie.keep.min.commits + 20
- 执行compaction后再执行clean和archive,由于clean和archivelog对资源要求较小,为避免资源浪费,使用DataArts调度的话可以compaction作为一个任务,clean、archive作为一个任务分别配置不同的资源执行来节省资源使用。
- 关于清理、归档参数的值不宜设置过大,会影响Hudi表的性能,通常建议:
- 执行资源
- Compaction调度的间隔应小于Compaction计划生成的间隔,例如1小时左右生成一个Compaction计划的话,执行Compaction计划的调度任务应该至少半小时调度一次。
- Compaction作业配置的资源,vcore数至少要大于等于单个分区的桶数,vcore数与内存的比例应为1:4即1个vcore配4G内存。
父主题: Bucket调优示例