FusionInsight MRS Hudi原理解析之Compaction
【摘要】 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会进行如下两个步骤
- 调度Compaction:由入湖作业完成,在这一步,Hudi扫描分区并选出待进行compaction的FileSlice,最后CompactionPlan会写入Hudi的Timeline。
- 执行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 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
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)