Hudi剖析|Hudi Log日志文件格式分析(一)
1. 介绍
在 MergeOnRead
存储类型时,对于记录的更新会写入log文件,对于log文件的格式,hudi进行了一些优化和规定,下面先分析了解log文件相关的类定义。
2. 分析
log日志文件相关类图结构如下图所示
其中 HoodieLogFormat
表示log日志格式的接口,其核心定义了 Reader
和 Writer
接口用来读写日志文件以及表示日志文件版本的 LogFormatVersion
类。
Reader
接口的核心代码如下
可以看到其定义了获取当前读取的日志文件、是否有下一个 HoodieLogBlock
、读取下一个 HoodieLogBlock
三个接口方法,该接口有 HoodieLogFormatReader
和 HoodieLogFileReader
两种实现,用于从 HoodieLogFile
中读取 HoodieLogBlock
。
Writer
接口的核心代码如下
其定义了获取当前写入的日志文件、添加 HoodieLogBlock
和获取当前文件大小三个接口方法。该接口有 HoodieLogFormatWriter
一种实现,用于将 HoodieLogBlock
写入 HoodieLogFile
。
可以看到,对于 Reader
和 Writer
,都是以 HoodieLogBlock
为单位进行读写, HoodieLogBlock
定义了日志文件块,其包含四种实现,如表示数据的 HoodieAvroDataBlock
,表示命令控制的 HoodieCommandBlock
,表示被损坏的 HoodieCorruptBlock
以及表示删除的 HoodieDeleteBlock
。
而整个写 HoodieLogFile
的入口在 HoodieAppendHandle#doAppend
中,其会将记录以 HoodieLogBlock
数据块写入 HoodieLogFile
文件。下一篇将分析具体的实现逻辑。
3. 总结
本文主要分析归纳了用于读写log日志文件的相关类,并了解到对于log日志文件的读写是以 HoodieLogBlock
为单位进行的。