27

Hudi剖析|Hudi Log日志文件格式分析(一)

 4 years ago
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日志文件相关类图结构如下图所示

2M3Qbuy.png!web

其中 HoodieLogFormat 表示log日志格式的接口,其核心定义了 ReaderWriter 接口用来读写日志文件以及表示日志文件版本的 LogFormatVersion 类。

Reader 接口的核心代码如下

可以看到其定义了获取当前读取的日志文件、是否有下一个 HoodieLogBlock 、读取下一个 HoodieLogBlock 三个接口方法,该接口有 HoodieLogFormatReaderHoodieLogFileReader 两种实现,用于从 HoodieLogFile 中读取 HoodieLogBlock

Writer 接口的核心代码如下

其定义了获取当前写入的日志文件、添加 HoodieLogBlock 和获取当前文件大小三个接口方法。该接口有 HoodieLogFormatWriter 一种实现,用于将 HoodieLogBlock 写入 HoodieLogFile

可以看到,对于 ReaderWriter ,都是以 HoodieLogBlock 为单位进行读写, HoodieLogBlock 定义了日志文件块,其包含四种实现,如表示数据的 HoodieAvroDataBlock ,表示命令控制的 HoodieCommandBlock ,表示被损坏的 HoodieCorruptBlock 以及表示删除的 HoodieDeleteBlock

而整个写 HoodieLogFile 的入口在 HoodieAppendHandle#doAppend 中,其会将记录以 HoodieLogBlock 数据块写入 HoodieLogFile 文件。下一篇将分析具体的实现逻辑。

3. 总结

本文主要分析归纳了用于读写log日志文件的相关类,并了解到对于log日志文件的读写是以 HoodieLogBlock 为单位进行的。

eiuIjey.png!web


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK