ApacheHudi(发音为“Hudi”)在hadoop兼容的存储上提供以下流原语:
Update/DeleteRecords 更新删除记录(如何更改表中的记录?)
ChangeStreams 改变流(我如何获取改变了的记录?)
在本节中,我们将讨论重要的概念和术语,这些概念和术语有助于理解并有效使用这些原语。
时间轴(Timeline)在其核心,Hudi维护了一个时间轴(Timeline),记录了在不同时间瞬间(instants)在表上执行的所有操作,这有助于提供表的瞬时视图,同时还有效地支持按到达顺序检索数据。一个Hudiinstant由以下组件组成:
Instantaction:在表上执行的操作类型
Instanttime:通常是一个时间戳(例如:49),该时间戳按操作开始时间的顺序单调增加。
state:当前Instant的状态
Hudi保证在时间轴上执行的操作的原子性和基于Instanttime的时间轴一致性;执行的关键操作包括:
COMMITS-一次提交表示将一组记录原子写入到表中。
CLEANS-删除表中不再需要的旧文件版本的后台活动。
DELTA_COMMIT-增量提交是指将一批记录原子写入到MergeOnRead存储类型的表中,其中一些/所有数据都可以只写到增量日志中。
COMPACTION-协调Hudi中差异数据结构的后台活动,例如:将更新从基于行的日志文件变成列格式。在内部,压缩表现为时间轴上的特殊提交。
ROLLBACK-表示提交/增量提交不成功且已回滚,删除在写入过程中产生的所有部分文件。
SAVEPOINT-将某些文件组标记为“已保存”,以便清理程序不会将其删除。在发生灾难/数据恢复的情况下,它有助于将表还原到时间轴上的某个点。
任何给定的即时(Instant)都可以处于以下状态之一:
REQUESTED-表示已调度但尚未启动的操作。
INFLIGHT-表示当前正在执行该操作。
COMPLETED-表示在时间轴上完成了该操作。
通过官方例子理解Timeline上面的示例显示了在Hudi表上大约10:00到10:20之间发生的更新事件,大约每5分钟一次,将提交元数据以及其他后台清理/压缩保留在Hudi时间轴上。观察的关键点是:提交时间(