数据治理中心 DataArts Studio-如何配置Hudi Compaction的Spark周期任务?:解决方案

时间:2025-02-12 15:03:04

解决方案

  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 提交并运行作业

support.huaweicloud.com/dataartsstudio_faq/dataartsstudio_01_7597.html