hudi基本概念
一、Timeline
Hudi 的核心是维护不同时间对表执行的所有操作的事件表,这有助于提供表的即时视图,同时还有效地支持按到达顺序进行数据检索。
Hudi 包含以下组件∶
1)Instant action∶在表上的操作类型
2)Instant time∶ 操作开始的一个时间戳,该时间戳会按照开始时间顺序单调递增
3)state∶即时状态
Hudi 保证在时间轴上执行的操作都是原子性的,所有执行的操作包括∶
1)commits∶原子的写入一张表的操作
2)cleans∶后台消除了表中的旧版本数据,即表中不在需要的数据
3)delta_commit增量提交,将一批数据原子写入到 MergeOnRead表中,并且只记录到增量日志中
4)compaction∶后台协调 Hudi 中的差异数据
5)rollback∶回滚,删除在写入过程中的数据
6)savepoint∶将某些文件标记"已保存",以便清理数据时不会删除它们,一般用于表的还原,可以将数据还原到某个时间点
任何操作都可以处于以下状态
1)Requested∶表示已安排操作行为,但是尚未开始
2)Inflight∶表示正在执行当前操作
3)Completed∶表示已完成操作
二、File management
Hudi将表组织成 DFS上基本路径下的目录结构。与hive类似,有相应的分区,每个分区均有唯一标示。
在每个分区内,有多个数据组,每个数据组包含几个segment,其中segment包含基本文件和日志文件。Hudi采用 MVCC设计,其中压缩操作将日志文件和基本数据文件合并成新的文件片,将未使用的文件片去除。
三、索引
Hudi通过使用索引机制,生成 hoodie密钥映射对应文件ID,从而提供高效 upsert 操作。
四、表类型
1)Copy on Write∶仅使用列式存储,例如 parquet。仅更新版本号,通过写入过程中执行同步合并来重写文件
2)Merge on Read∶基于列式存储(parquet)和行式存储(arvo)结合的文件更始进行存储。更新记录到增量文件,压缩同步和异步生成新版本的文件
五、查询类型
1)快照查询(Snapshot Queries)∶查询操作将查询最新快照的表数据。如果是 Merge on Read类型的表,它将动态合并最新文件版本的基本数据和增量数据用于显示查询。如果是 Copy On Write 类型的表,它直接查询 parquet 表,同时提供upsert/delete 操作.
2)增量查询(Incremental Queries)∶查询只能看到写入表的新数据。这有效的提供了 change streams 来启用增量数据管道。
3)优化读查询(Read Optimized Queries)∶ 查询将查看给定提交/压缩操作表的最新快 照
4)表查询异同:快照查询(实时查询)数据延迟更低,查询延迟更高(合并列式 + 基于行的增量);优化读查询:数据延迟高,查询性能低(原始列式存储)