本篇文章对执行异步Compaction的不同部署模型一探究竟。
1. Compaction
对于Merge-On-Read表,数据使用列式Parquet文件和行式Avro文件存储,更新被记录到增量文件,然后进行同步/异步compaction生成新版本的列式文件。Merge-On-Read表可减少数据摄入延迟,因而进行不阻塞摄入的异步Compaction很有意义。
2. 异步Compaction
异步Compaction会进行如下两个步骤
- 调度Compaction:由摄取作业完成,在这一步,Hudi扫描分区并选出待进行compaction的FileSlice,最后CompactionPlan会写入Hudi的Timeline。
- 执行Compaction:一个单独的进程/线程将读取CompactionPlan并对FileSlice执行Compaction操作。
3. 部署模型
几种执行异步Compaction的方法如下
3.1 Spark Structured Streaming
在0.6.0版本,Hudi支持在Spark Structured Streming作业中支持异步Compaction,Compactions在streaming作业内被异步调度和执行,Spark Structured作业在Merge-On-Read表中会默认开启异步Compaction。
Java代码示例如下
import org.apache.hudi.DataSourceWriteOptions;
import org.apache.hudi.HoodieDataSourceHelpers;
import org.apache.hudi.config.HoodieCompactionConfig;
import org.apache.hu