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)表查询异同:快照查询(实时查询)数据延迟更低,查询延迟更高(合并列式 + 基于行的增量);优化读查询:数据延迟高,查询性能低(原始列式存储)
  

 

posted @ 2021-12-27 21:52  Shydow  阅读(1157)  评论(0编辑  收藏  举报