Hudi的核心概念 —— 时间轴(TimeLine)

时间: 2023-12-16 admin IT培训

Hudi的核心概念 —— 时间轴(TimeLine)

Hudi的核心概念 —— 时间轴(TimeLine)

文章目录

  • 时间轴(TimeLine)

时间轴(TimeLine)

就是一个时间线,它的每一个操作都记录在内,每一个时刻,你做了什么事情,对某一个时刻,记录一个时刻的数据

Hudi 的核心是维护表上在不同的即时时间(instants)执行的所有操作的时间轴(timeline),这有助于提供表的即时视图,同时还有效地支持按到达顺序检索数据。一个instant 由以下三个部分组成:action(动作),time(时间),State(状态)

1)Instant action:在表上执行的操作类型

  • COMMITS:一次 commit 表示将一批数据原子性地写入一个表。
  • CLEANS:清除表中不再需要的旧版本文件的后台活动。
  • DELTA_COMMIT:增量提交指的是将一批数据原子性地写入一个 MergeOnRead 类型的表,其中部分或所有数据可以写入增量日志。
  • COMPACTION:合并 Hudi 内部差异数据结构的后台活动,例如:将更新操作从基于行的 log 日志文件合并到列式存储的数据文件。在内部,COMPACTION 体现为timeline 上的特殊提交。每一次增量提交都会写到一个log文件中,将数据都合并到一起。
  • ROLLBACK:表示当 commit/delta_commit 不成功时进行回滚,其会删除在写入过程中产生的部分文件。
  • SAVEPOINT:将某些文件组标记为已保存,以便其不会被删除。在发生灾难需要恢复数据的情况下,它有助于将数据集还原到时间轴上的某个点。

2)Instant time

通常是一个时间戳(例如:20190117010349),它按照动作开始时间的顺序单调增加。

3)State

  • REQUESTED:表示某个 action 已经调度,但尚未执行。
  • INFLIGHT:表示 action 当前正在执行。
  • COMPLETED:表示 timeline 上的 action 已经完成。

4)两个时间概念

区分两个重要的时间概念:

  • Arrival time: 数据到达 Hudi 的时间,commit time。(摄入时间)
  • Event time: record 中记录的时间。(事件时间)

上图中采用时间(小时)作为分区字段,从 10:00 开始陆续产生各种 commits,10:20 来了一条 9:00 的数据,根据 event time 该数据仍然可以落到 9:00 对应的分区,通过timeline 直接消费 10:00 (commit time)之后的增量更新(只消费有新 commits 的 group),那么这条延迟的数据仍然可以被消费到。