
# 离线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。
  set hoodie.archive.async = false;                --关闭异步归档。
  set hoodie.archive.automatic = false;            --关闭自动归档。
   
  run compaction on $tablename;                    --执行compaction计划。
  run clean on $tablename;                         --执行clean操作清理冗余版本。
  run archivelog on $tablename;                    --执行archivelog合并清理元数据文件。
  ```
  ![](https://support.huaweicloud.com/devg-rule-mrs/public_sys-resources/caution_3.0-zh-cn.png)
  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作为一个任务分别配置不同的资源执行来节省资源使用。
  
  3. Flink CDC写Hudi mor表场景，选择[方式二：表服务与写任务分开执行](https://support.huaweicloud.com/devg-rule-mrs/mrs_07_450207.html#mrs_07_450207__section1695619343438)。同时，由于CDC场景会开启changelog，需要在异步表服务脚本中添加"set hoodie.allow.operation.metadata.field = true"。
    
- 执行资源
  1. Compaction调度的间隔应小于Compaction计划生成的间隔，例如1小时左右生成一个Compaction计划的话，执行Compaction计划的调度任务应该至少半小时调度一次。
  
  2. Compaction作业配置的资源，vcore数至少要大于等于单个分区的桶数，vcore数与内存的比例应为1：4即1个vcore配4G内存。
   
 
