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

简介: 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日志并进行多维度分析。
目录
相关文章
|
3天前
|
机器学习/深度学习 前端开发 数据挖掘
工具变量法(两阶段最小二乘法2SLS)线性模型分析人均食品消费时间序列数据和回归诊断(下)
工具变量法(两阶段最小二乘法2SLS)线性模型分析人均食品消费时间序列数据和回归诊断
74 11
|
4天前
|
Java
log4j异常日志过滤规则配置
log4j异常日志过滤规则配置
15 0
|
8天前
|
运维 Oracle 关系型数据库
Oracle日志文件:数据王国的“记事本”
【4月更文挑战第19天】Oracle日志文件是数据库稳定运行的关键,记录数据变更历史,用于恢复和故障处理。它们协调并发操作,确保数据一致性和完整性。日志文件实时写入操作信息并定期刷新到磁盘,便于数据恢复。然而,日志文件需备份和归档以保证安全性,防止数据丢失。日志文件,数据王国的“记事本”,默默守护数据安全。
|
9天前
工具变量法(两阶段最小二乘法2SLS)线性模型分析人均食品消费时间序列数据和回归诊断2
工具变量法(两阶段最小二乘法2SLS)线性模型分析人均食品消费时间序列数据和回归诊断
15 0
|
9天前
|
机器学习/深度学习 前端开发 数据挖掘
R语言计量经济学:工具变量法(两阶段最小二乘法2SLS)线性模型分析人均食品消费时间序列数据和回归诊断
R语言计量经济学:工具变量法(两阶段最小二乘法2SLS)线性模型分析人均食品消费时间序列数据和回归诊断
39 0
|
17天前
|
运维 安全 Ubuntu
`/var/log/syslog` 和 `/var/log/messages` 日志详解
`/var/log/syslog` 和 `/var/log/messages` 是Linux系统的日志文件,分别在Debian和Red Hat系发行版中记录系统事件和错误。它们包含时间戳、日志级别、PID及消息内容,由`rsyslog`等守护进程管理。常用命令如`tail`和`grep`用于查看和搜索日志。日志级别从低到高包括`debug`到`emerg`,表示不同严重程度的信息。注意保护日志文件的安全,防止未授权访问,并定期使用`logrotate`进行文件轮转以管理磁盘空间。
24 1
|
17天前
|
网络协议 应用服务中间件 Linux
centos7 Nginx Log日志统计分析 常用命令
centos7 Nginx Log日志统计分析 常用命令
33 2
|
18天前
|
Ubuntu Linux 网络安全
/var/log/auth.log日志详解
`/var/log/auth.log`是Linux(尤其是Debian系如Ubuntu)记录身份验证和授权事件的日志文件,包括登录尝试(成功或失败)、SSH活动、sudo使用和PAM模块的操作。登录失败、SSH连接、sudo命令及其它认证活动都会在此记录。查看此日志通常需root权限,可使用`tail`、`less`或`grep`命令。文件内容可能因发行版和配置而异。例如,`sudo tail /var/log/auth.log`显示最后几行,`sudo grep &quot;failed password&quot; /var/log/auth.log`搜索失败密码尝试。
74 8
|
21天前
|
SQL 存储 监控
日志问题精要:分析与总结
该文档讲述了应用系统日志记录的重要性和规则。主要目的是记录操作轨迹、监控系统状态和回溯故障。日志记录点包括系统入口、调用其他模块、调用结束、出口和出错时。内容应遵循UTF-8编码,避免敏感信息,按INFO级别记录,及时、完整且安全。日志输出要控制频率和长度,不影响系统性能,并按策略备份和清理。日志等级分为DEBUG、INFO、WARN、ERROR和FATAL。日志文件应有明确目录结构,大小有限制,并定期清理。注意事项包括输出异常堆栈、避免打印对象实例的hashCode、选择合适的日志框架和格式,并支持动态修改日志级别。还要实现链路追踪,确保在多线程环境中正确记录日志。
20 0
|
SQL 数据采集 监控
基于日志服务数据加工分析Java异常日志
采集并脱敏了整个5月份的项目异常日志,准备使用日志服务数据加工做数据清洗以及分析。本案例是基于使用阿里云相关产品(OSS,RDS,SLS等)的SDK展开自身业务。需要对异常日志做解析,将原始日志中时间、错误码、错误信息、状态码、产品信息、请求方法、出错行号提取出来。然后根据提取出来的不同产品信息做多目标分发处理。对清洗后的数据做异常日志数据分析。
715 0
基于日志服务数据加工分析Java异常日志