背景
在之前的文章Apache Hudi初探(六)(与spark的结合)
中,我们没有过多的解释Spark中hudi Compaction的实现,在这里详细说一下
注意:在hudi中有同步,异步Compaction的概念,为了保证写入的及时性和数据读取的时效性,hudi在一步compaction的过程中会引入一个后台线程进行compaction,所以异步Compaction又分同步compaction计划生成和异步compaction计划生成和最终的Compaction计划的执行(而compaction计划的执行是在后台异步执行的)
对应的配置为:
hoodie.compact.inline 是否是同步进行Compaction
hoodie.compact.schedule.inline 是够是异步Compaction计划生成
详说杂谈
这里直接以同步Compaction为例,直接到BaseHoodieWriteClient runTableServicesInline方法:
if (config.inlineCompactionEnabled()) {
runAnyPendingCompactions(table);
metadata.addMetadata(HoodieCompactionConfig.INLINE_COMPACT.key(), "true");
inlineCompaction(extraMetadata);
} else {
metadata.addMetadata(HoodieCompactionConfig.INLINE_COMPACT.key(), "false");
}
假设hoodie.compact.inline为true,也就是config.inlineCompactionEnabled()为true,那就直接执行Compaction流程:
-
runAnyPendingCompactions
重新运行上次失败的Compaction计划- 过滤出没有完成的Compaction计划,并执行Compact操作,具体的为SparkRDDWriteClient.compact
这里我们先略过,假设没有pending的Compaction操作,重点看inlineCompaction
- 过滤出没有完成的Compaction计划,并执行Compact操作,具体的为SparkRDDWriteClient.compact
-
me
ApacheHudi与Spark结合:深入理解异步与同步Compaction

文章详细阐述了ApacheHudi中的同步和异步Compaction概念,特别是如何在Spark中实现。当hoodie.compact.inline设置为true时,Hudi会启动同步Compaction流程,包括运行任何待处理的Compaction计划和生成新的Compaction计划。Hudi通过后台线程异步执行Compaction计划,确保写入的实时性和数据读取的效率。文章还介绍了Hudi如何生成和执行Compaction计划的详细步骤,涉及多个关键方法和配置选项。
最低0.47元/天 解锁文章
8281

被折叠的 条评论
为什么被折叠?



