文档首页/ 数据治理中心 DataArts Studio/ 常见问题/ 数据集成(实时作业)/ 如何配置Hudi Compaction的Spark周期任务?
更新时间:2024-12-03 GMT+08:00
分享

如何配置Hudi Compaction的Spark周期任务?

问题描述

Migration写入数据到Hudi时为了保证稳定性需要将Compaction任务单独拆成Spark作业并交给MRS执行,那么如何进行配置?

解决方案

  1. 修改Migration实时集成作业配置。

    Migration任务中必须关闭异步compaction动作,同时将clean和archive关闭。具体来说,可以在“Hudi表属性全局配置”或单表的“表属性编辑”中配置下表所示参数。

    表1 Hudi表参数

    参数名

    参数值

    含义

    compaction.schedule.enabled

    true

    开启compaction计划生成

    compaction.delta_commits

    60

    compaction计划生成的compaction次数触发周期

    compaction.async.enabled

    false

    关闭异步compaction

    clean.async.enabled

    false

    清理历史版本数据文件

    hoodie.archive.automatic

    false

    Hudi commit文件老化的开关

    图1 关闭Migration compaction任务

    如上配置项配置完成后,作业启动后不再进行compaction任务,只会定期生成compaction计划,Spark SQL作业可以通过“run compaction on”命令执行compaction计划。

    compaction计划一定需要Migration任务生成,然后交给Spark执行,否则会有Hudi Timeline的冲突,导致Spark compaction作业执行失败。

  2. 创建Spark SQL周期性Compaction任务。

    1. 前往DataArts Studio数据开发界面,参考《开发批处理单任务SQL作业》创建Spark SQL作业。
      图2 创建Spark SQL单任务作业
    2. 配置与Hudi相对应的Spark数据连接,并选中需要操作Hudi表对应的数据库。
      图3 配置连接与数据库
    3. 根据实际情况配置compaction的调度周期。
      图4 配置调度周期
    4. 填写Spark SQL的compaction语句,提交并运行作业。
      set hoodie.compact.inline = true;
      set hoodie.run.compact.only.inline = true;
      set hoodie.clean.automatic = false;
      set hoodie.cleaner.commits.retained = 120;
      set hoodie.keep.min.commits = 121;
      set hoodie.keep.max.commits = 141; 
      run compaction on `db_name`.`table_name`; 
      run clean on `db_name`.`table_name`;
      run archivelog on `db_name`.`table_name`;
      图5 提交并运行作业

相关文档