FusionInsight MRS Hudi原理解析之Compaction

一枚核桃 发表于 2021/12/28 10:49:30 2021/12/28
【摘要】 Hudi的Compaction作用Hudi的Merge-On-Read表,数据使用列式Parquet文件和行式Avro文件存储,Merge-On-Read表可减少数据摄入延迟,更新被记录到增量文件,但是随着行式数据的不断增长,为加快分析效率,需要对列式文件和行式文件的合并(compaction)生成新版本的列式文件,提升数据访问的性能。因而进行Compaction很有意义。Compactio...

Hudi的Compaction作用

Hudi的Merge-On-Read表,数据使用列式Parquet文件和行式Avro文件存储,Merge-On-Read表可减少数据摄入延迟,更新被记录到增量文件,但是随着行式数据的不断增长,为加快分析效率,需要对列式文件和行式文件的合并(compaction)生成新版本的列式文件,提升数据访问的性能。因而进行Compaction很有意义。

Compaction用于合并mor表Base和Log文件。

Compaction会进行如下两个步骤

  1. 调度Compaction:由入湖作业完成,在这一步,Hudi扫描分区并选出待进行compaction的FileSlice,最后CompactionPlan会写入Hudi的Timeline。
  2. 执行Compaction:一个单独的进程/线程将读取CompactionPlan并对FileSlice执行Compaction操作。

使用Compaction的方式分为同步和异步两种:

同步方式包括:

  • 在使用HoodieDeltaStreamer将上游(Kafka/DFS)数据写入 hudi数据集时参数--disable-compaction默认为false,自动进行compaction操作。
  • 使用datasource在写入时指定参数:

    option("hoodie.compact.inline", "true").

    option("hoodie.compact.inline.max.delta.commits", "2").

异步方式包括

  • 使用hudi-cli进行异步compaction

    调度compaction:

    compaction schedule --hoodieConfigs 'hoodie.compaction.strategy=org.apache.hudi.table.action.compact.strategy.BoundedIOCompactionStrategy,hoodie.compaction.target.io=1,hoodie.compact.inline.max.delta.commits=1'

    执行compaction:

    compaction run --parallelism 100 --sparkMemory 1g --retry 1 --compactionInstant 20210602101315 --hoodieConfigs 'hoodie.compaction.strategy=org.apache.hudi.table.action.compact.strategy.BoundedIOCompactionStrategy,hoodie.compaction.target.io=1,hoodie.compact.inline.max.delta.commits=1' --propsFilePath hdfs://hacluster/tmp/default/tb_test_mor/.hoodie/hoodie.properties --schemaFilePath /tmp/default/tb_test_mor/.hoodie/compact_tb_base.json
  • 使用API进行异步compaction

    调度compaction:

    spark-submit --master yarn --jars /opt/client/Hudi/hudi/lib/hudi-client-common-0.8.0-hw-ei-311001-SNAPSHOT.jar --class org.apache.hudi.utilities.HoodieCompactor /opt/client/Hudi/hudi/lib/hudi-utilities_2.12-0.8.0-hw-ei-311001-SNAPSHOT.jar --base-path /tmp/default/tb_test_mor --table-name tb_test_mor --parallelism 100 --spark-memory 1G --schema-file /tmp/default/tb_test_mor/.hoodie/compact_tb_base.json --instant-time 20210602141810 --schedule --strategy org.apache.hudi.table.action.compact.strategy.UnBoundedCompactionStrategy

    执行compaction:

    spark-submit --master yarn --jars /opt/client/Hudi/hudi/lib/hudi-client-common-0.8.0-hw-ei-311001-SNAPSHOT.jar --class org.apache.hudi.utilities.HoodieCompactor /opt/client/Hudi/hudi/lib/hudi-utilities_2.12-0.8.0-hw-ei-311001-SNAPSHOT.jar --base-path /tmp/default/tb_test_mor --table-name tb_test_mor --parallelism 100 --spark-memory 1G --schema-file /tmp/default/tb_test_mor/.hoodie/compact_tb_base.json --instant-time 20210602141810


说明


  • 使用hudi-cli进行调度compaction时,不需要指定instant-time,系统会自动生成并在调度成功后返回,只需在执行时传入该参数即可。
  • schema-file需要用户手动编辑当前Hudi表的表结构schema文件上传到服务器上(可以使用最近一次“.commit”文件中的schema)。
  • compaction不支持和写并发。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。