![](/style/images/good.png)
![](/style/images/bad.png)
Hudi剖析|Hudi Log日志文件格式分析(一)
source link: http://mp.weixin.qq.com/s?__biz=MzU5OTQ1MDEzMA%3D%3D&%3Bmid=2247487237&%3Bidx=1&%3Bsn=1d80bb0c38e48bdf5e2a472965e08a4d
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
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
为单位进行的。
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK