更新时间:2025-04-01 GMT+08:00
分享

常用参数介绍及使用场景

写入篇

参数名称

可选值

含义

hoodie.sql.bulk.insert.enable

true、false

是否开启bulkinsert方式写入。

hoodie.combine.before.insert

true、false

执行写操作前,不对增量数据中的同主键数据进行merge操作,注意会导致数据重复

hoodie.sql.insert.mode

upsert、strict、non-strict

  • upsert:增量数据和存量数据中的同主键数据会merge。
  • strict:增量数据不能包含存量数据已有的主键,否则增量任务失败。
  • non-strict:增量数据和存量数据中的同主键数据不进行merge,直接写入。

hoodie.datasource.write.row.writer.enable

true、false

开启后,会使用spark原生的写parquet文件的方式去写数据,性能更好。

常用业务场景案例:初始化Hudi表,迁移大批量数据。

该初始化方式只能执行一次,用于第一次迁移大批量数据到Hudi表,后续增量任务不能再继续使用。

set hoodie.sql.bulk.insert.enable = true;
set hoodie.combine.before.insert = false;
set hoodie.sql.insert.mode = non-strict;
set hoodie.datasource.write.row.writer.enable = true;
insert into SinkTable select * from SourceTable;

Compaction篇

参数名称

可选值

含义

hoodie.compact.inline

true,false

开启/关闭compaction。

hoodie.schedule.compact.only.inline

true,false

开启compaction之后,再设置该参数为true将会只生成compaction计划。

hoodie.run.compact.only.inline

true,false

开启compaction之后,再设置该参数为true将会只执行已存在的compaction计划。

hoodie.compact.inline.max.delta.commits

X (大于0的int值)

开启compaction之后,写任务的提交数超过X次才会触发compaction。

Clean篇

参数名称

可选值

含义

hoodie.clean.automatic

true,false

开启/关闭clean。

hoodie.clean.async

true,false

false,不要开启。

hoodie.cleaner.commits.retained

X (大于0的int值)

开启clean之后,保留最后X次写提交对应的数据文件。

Archive篇

参数名称

可选值

含义

hoodie.archive.automatic

true,false

开启/关闭archive。

hoodie.archive.async

true,false

false,不要开启。

hoodie.keep.min.commits

X (大于0的int值)

开启archive之后,至少保留最后X次写提交对应的元数据。

hoodie.keep.max.commits

Y (大于0的int值)

开启archive之后,至多保留最后Y次写提交对应的元数据。

运维篇

下面这3种案例足够用来快速运维所有的MOR表和COW表,参数请勿私自修改,该运维手段不适合作为长期的运维,正常的运维过程请参考选择合适的表服务执行方式章节。

  • 常用业务场景案例一:MOR表里有很多compaction计划都没有执行,需要手动立即运行Hudi表中的所有compaction计划。

    此场景对写入任务没有任何影响,前提是Hudi表里有compaction计划,否则不起作用。

    set hoodie.clean.automatic = false;
    set hoodie.clean.async = false;
    set hoodie.archive.automatic = false;
    set hoodie.archive.async= false;
    set hoodie.compact.inline = true;
    set hoodie.run.compact.only.inline = true;
    run compaction on SinkTable;
  • 常用业务场景案例二:MOR表没有做过compaction,表里也没有任何compaction计划,需要紧急执行compaction/clean/archive来提升性能。

    使用此场景要确保写入任务已经停止或者写入任务此时没有数据写入

    set hoodie.compact.inline = true;
    set hoodie.compact.inline.max.delta.commits = 1;
    set hoodie.clean.automatic = false;
    set hoodie.clean.async = false;
    set hoodie.cleaner.commits.retained = 2;
    set hoodie.archive.automatic = false;
    set hoodie.archive.async= false;
    set hoodie.keep.min.commits = 3;
    set hoodie.keep.max.commits = 4;
    run compaction on <database name>. <table name>;
    run clean on <database name>. <table name>;
    run archivelog on <database name>.<table name>;
  • 常用业务场景案例三:COW表或者MOR表+insert overwrite,如果没有做过clean和archive,数据文件的版本以及元数据数量都很多,需要进行一次彻底清理。

    使用此场景要确保写入任务已经停止

    set hoodie.cleaner.commits.retained = 1;
    set hoodie.keep.min.commits = 2;
    set hoodie.keep.max.commits = 3;
    run clean on <database name>. <table name>;
    run archivelog on <database name>.<table name>;

相关文档