更新时间: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作为一个任务分别配置不同的资源执行来节省资源使用。
  • 执行资源
    • Compaction调度的间隔应小于Compaction计划生成的间隔,例如1小时左右生成一个Compaction计划的话,执行Compaction计划的调度任务应该至少半小时调度一次。
    • Compaction作业配置的资源,vcore数至少要大于等于单个分区的桶数,vcore数与内存的比例应为1:4即1个vcore配4G内存。

相关文档