一. Hudi Timeline(时间轴)
Hudi维护着一条对Hudi数据集所有操作的不同Instant组成的Timeline(时间轴),通过时间轴,用户可以轻易的进行增量查询或基于某个历史时间点的查询,这也是Hudi对外提供基于时间点查询的核心能力之一。
每条 Timeline必须包含零或多个 Instant。所有 Instant构成了 Timeline, Instant在Hudi中被定义为 HoodieInstant,其主要包含三个组件(字段):
State state = State.COMPLETED;
String action;
String timestamp;
1.action操作类型
action:操作,对数据集执行的操作类型,如commit、deltacommit等。
执行的关键操作包括:
COMMITS - 一次提交表示将一组记录原子写入到数据集中。
CLEANS - 删除数据集中不再需要的旧文件版本的后台活动。
DELTA_COMMIT - 增量提交是指将一批记录原子写入到MergeOnRead存储类型的数据集中,其中一些/所有数据都可以只写到增量日志中。
COMPACTION - 协调Hudi中差异数据结构的后台活动,例如:将更新从基于行的日志文件变成列格式。在内部,压缩表现为时间轴上的特殊提交。
ROLLBACK - 表示提交/增量提交不成功且已回滚,删除在写入过程中产生的所有部分文件。
SAVEPOINT - 将某些文件组标记为"已保存",以便清理程序不会将其删除。在发生灾难/数据恢复的情况下,它有助于将数据集还原到时间轴上的某个点。
2.tmiestamp时间戳
tmiestamp:时间戳,发生的时间戳,Hudi会保证单调递增。
即时时间 : 即时时间通常是一个时间戳(例如:20190117010349),该时间戳按操作开始时间的顺序单
3.state状态
state:即时的状态,如requested、inflight、completed等状态,状态会转变,如当提交完成时会从inflight状态转变为completed状态。任何给定的即时都可以处于以下状态之一。
REQUESTED - 表示已调度但尚未启动的操作。
INFLIGHT - 表示当前正在执行该操作。
COMPLETED - 表示在时间轴上完成了该操作。
4.总结
Timeline(时间轴)是Hudi中非常重要的概念,基于历史时间点的查询及增量查询均需由Timeline提供支持,因此了解Timeline对于理解Hudi支持何种查询非常有用。
我的理解:时间轴上记录的每一个点,都是一组增量的数据变更,同时记录有操作类型 、状态和时间戳,这样我们就可以从一个点或连续的多个点来查看历史增量视图,也可以看最新的全量的数据视图。


