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

选择合适的表服务执行方式

方式一:表服务与写任务一起执行

严格按照模板执行,不允许删除/增加/修改其中的参数

  1. insert overwrite场景。
    • 此场景不管是cow表还是mor表,都只需要做clean和archive,不需要做compaction。
    • 推荐直接用cow表。
      按照下面这个模板直接使用:
      set hoodie.cleaner.commits.retained = 5; // clean默认是开启的,insert overwrite场景clean保留的版本数不能太多,设置为5已足够。
      set hoodie.keep.min.commits = 6; // archive默认是开启的,archive最少保留的元数据个数比clean保留的版本数多就可以。
      set hoodie.keep.max.commits = 7; // archive最大保留的元数据个数
      insert overwrite SinkTable select * from SourceTable;
  1. insert into场景。
    • cow表:
      insert into场景,无需配置任何参数。
      insert into SinkTable select * from SourceTable;
    • mor表:
      insert into场景,只需要考虑compaction的触发频率。
      set hoodie.compact.inline.max.delta.commits = X; // 参数默认值是5。业务侧要考虑往Hudi表写入X次所追加的log文件的大小,控制log文件的大小在300M以内性能最佳。举例,写入10次之后log文件的大小为500M,如果想控制log文件的大小在100M,可以粗略设置该参数的值为100/(500/10)=2。
      set hoodie.cleaner.commits.retained = X + 1; 
      set hoodie.keep.min.commits = X + 10;
      set hoodie.keep.max.commits = X + 20;
      insert into SinkTable select * from SourceTable;

方式二:表服务与写任务分开执行

严格按照模板执行,不允许删除/增加/修改其中的参数

  1. 写任务中配置。
    • cow表:

      直接使用方式一:表服务与写任务一起执行

    • mor表:
      set hoodie.compact.inline = true;
      set hoodie.schedule.compact.only.inline=true;
      set hoodie.compact.inline.max.delta.commits = X; // 参数默认值是5。业务侧要考虑往Hudi表写入X次所追加的log文件的大小,控制log文件的大小在300M以内性能最佳。举例,X值当前是10,写入10次之后log文件的大小为500M,如果想控制log文件的大小在100M,可以粗略设置该参数的值为100/(500/10)=2。
      set hoodie.clean.automatic = false;
      set hoodie.archive.automatic = false;
      insert into SinkTable select * from SourceTable;
  2. 异步脚本执行表服务。

    该异步脚本通常需要在DGC平台上进行定时调度,对读性能要求比较高建议1小时调度一次,其它可以设置为2~4小时调度一次。

    mor表:
    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;
    set hoodie.cleaner.commits.retained = X + 1;
    set hoodie.keep.min.commits = X + 10;
    set hoodie.keep.max.commits = X + 20;
    run compaction on <database name>. <table name>;   -- 执行Compaction计划
    run clean on <database name>. <table name>;        -- 执行Clean操作
    run archivelog on <database name>.<table name>;    -- 执行Archive操作

表服务选择技巧

相关文档