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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: Hudi Log日志文件格式分析(一)

1. 介绍

MergeOnRead存储类型时,对于记录的更新会写入log文件,对于log文件的格式,hudi进行了一些优化和规定,下面先分析了解log文件相关的类定义。

2. 分析

log日志文件相关类图结构如下图所示


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

Reader接口的核心代码如下

interface Reader extends Closeable, Iterator<HoodieLogBlock> {
    /**
     * @return the path to this {@link HoodieLogFormat}
     */
    HoodieLogFile getLogFile();
    /**
     * Read log file in reverse order and check if prev block is present
     *
     * @return
     */
    public boolean hasPrev();
    /**
     * Read log file in reverse order and return prev block if present
     *
     * @return
     * @throws IOException
     */
    public HoodieLogBlock prev() throws IOException;
  }

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

Writer接口的核心代码如下

interface Writer extends Closeable {
    /**
     * @return the path to this {@link HoodieLogFormat}
     */
    HoodieLogFile getLogFile();
    /**
     * Append Block returns a new Writer if the log is rolled
     */
    Writer appendBlock(HoodieLogBlock block) throws IOException, InterruptedException;
    long getCurrentSize() throws IOException;
  }

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

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

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

3. 总结

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

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
1月前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
212 30
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
27天前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
本文介绍了MySQL InnoDB存储引擎中的数据文件和重做日志文件。数据文件包括`.ibd`和`ibdata`文件,用于存放InnoDB数据和索引。重做日志文件(redo log)确保数据的可靠性和事务的持久性,其大小和路径可由相关参数配置。文章还提供了视频讲解和示例代码。
131 11
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
|
27天前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的控制文件与归档日志文件
本文介绍了Oracle数据库中的控制文件和归档日志文件。控制文件记录了数据库的物理结构信息,如数据库名、数据文件和联机日志文件的位置等。为了保护数据库,通常会进行控制文件的多路复用。归档日志文件是联机重做日志文件的副本,用于记录数据库的变更历史。文章还提供了相关SQL语句,帮助查看和设置数据库的日志模式。
【赵渝强老师】Oracle的控制文件与归档日志文件
|
1月前
|
存储 SQL 监控
|
1月前
|
运维 监控 安全
|
27天前
|
Oracle 关系型数据库 数据库
【赵渝强老师】Oracle的参数文件与告警日志文件
本文介绍了Oracle数据库的参数文件和告警日志文件。参数文件分为初始化参数文件(PFile)和服务器端参数文件(SPFile),在数据库启动时读取并分配资源。告警日志文件记录了数据库的重要活动、错误和警告信息,帮助诊断问题。文中还提供了相关视频讲解和示例代码。
|
1月前
|
监控 关系型数据库 MySQL
分析慢查询日志
【10月更文挑战第29天】分析慢查询日志
38 3
|
1月前
|
监控 关系型数据库 数据库
怎样分析慢查询日志?
【10月更文挑战第29天】怎样分析慢查询日志?
35 2
|
2月前
|
SQL 数据库
为什么 SQL 日志文件很大,我应该如何处理?
为什么 SQL 日志文件很大,我应该如何处理?
|
2月前
|
Python
log日志学习
【10月更文挑战第9天】 python处理log打印模块log的使用和介绍
39 0