更新时间:2024-11-06 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合并清理元数据文件。
    1. 关于清理、归档参数的值不宜设置过大,会影响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

    2. 执行compaction后再执行clean和archive,由于clean和archivelog对资源要求较小,为避免资源浪费,使用DataArts调度的话可以compaction作为一个任务,clean、archive作为一个任务分别配置不同的资源执行来节省资源使用。
  • 执行资源
    1. Compaction调度的间隔应小于Compaction计划生成的间隔,例如1小时左右生成一个Compaction计划的话,执行Compaction计划的调度任务应该至少半小时调度一次。
    2. Compaction作业配置的资源,vcore数至少要大于等于单个分区的桶数,vcore数与内存的比例应为1:4即1个vcore配4G内存。