Apache Hudi 是一个基于 Hadoop 的分布式数据存储系统,支持存储结构化和非结构化数据。Hudi 的时间轴 (TimeLine) 是其重要的组成部分,用于管理和跟踪数据的变化历史。在本文中,我将详细介绍 Hudi 时间轴的基本概念、特点以及如何使用它来进行数据管理。
一、Hudi 时间轴的基本概念
Hudi 时间轴用于跟踪和管理数据的变化历史。它支持对数据的增删改查,并且能够高效地处理大量数据。Hudi的核心是维护表上在不同的即时时间(instants)执行的所有操作的时间轴(timeline),这有助于提供表的即时视图,同时还有效地支持按到达顺序检索数据。一个instant由以下三个部分组成:
- Instant action : 操作类型
- Instant time : 时间戳
- state : 状态
Instant action:在表上执行的操作类型
-
COMMITS:一次commit表示将一批数据原子性地写入一个表。
-
CLEANS:清除表中不再需要的旧版本文件的后台活动。
-
DELTA_COMMIT:增量提交指的是将一批数据原子性地写入一个MergeOnRead类型的表,其中部分或所有数据可以写入增量日志。
-
COMPACTION:合并Hudi内部差异数据结构的后台活动,例如:将更新操作从基于行的log日志文件合并到列式存储的数据文件。在内部,COMPACTION体现为timeline上的特殊提交。
-
ROLLBACK:表示当commit/delta_commit不成功时进行回滚,其会删除在写入过程中产生的部分文件。
-
SAVEPOINT:将某些文件组标记为已保存,以便其不会被删除。在发生灾难需要恢复数据的情况下,它有助于将数据集还原到时间轴上的某个点。
Instant time
通常是一个时间戳(例如:20190117010349),它按照动作开始时间的顺序单调增加。
State
- REQUESTED:表示某个action已经调度,但尚未执行。
- INFLIGHT:表示action当前正在执行。
- COMPLETED:表示timeline上的action已经完成。
上图中采用时间(小时)作为分区字段,从 10:00 开始陆续产生各种 commits,10:20 来了一条 9:00 的数据,根据event time该数据仍然可以落到 9:00 对应的分区,通过 timeline 直接消费 10:00 (commit time)之后的增量更新(只消费有新 commits 的 group),那么这条延迟的数据仍然可以被消费到。
二、Hudi 时间轴的特点
Hudi 时间轴具有以下几个特点:
- 可扩展性:Hudi 时间轴支持水平扩展,能够轻松地添加更多的节点来存储更多的数据。
- 高可用性:Hudi 时间轴支持自动故障转移,能够在节点出现故障时自动切换到备用节点上。
- 高效性:Hudi 时间轴支持高效的数据管理和处理,能够按时间粒度进行数据聚合和查询。
- 可定制性:Hudi 时间轴支持自定义数据模型和查询语言,能够根据实际需求进行定制化。
三、如何使用 Hudi 时间轴进行数据管理
Hudi 时间轴支持多种数据管理场景,包括批量操作、实时操作和事件流操作。下面将介绍如何使用 Hudi 时间轴进行数据管理:
- 批量操作:批量操作是指对数据进行批量的增删改查操作。可以使用 Hudi 时间轴的命令行工具进行批量操作,也可以使用 API 进行批量操作。
- 实时操作:实时操作是指对数据进行实时的增删改查操作。可以使用 Hudi 时间轴的 API 进行实时操作,也可以使用命令行工具进行实时操作。
- 事件流操作:事件流操作是指对数据进行事件流的增删改查操作。可以使用 Hudi 时间轴的 API 进行事件流操作,也可以使用命令行工具进行事件流操作。
四、结论
Hudi 时间轴是 Hudi 系统中的重要组成部分,它支持高效的数据管理和处理,能够跟踪和管理数据的变化历史。Hudi 时间轴具有可扩展性、高可用性、高效性和可定制性等特点,能够满足不同数据管理场景的需求。
标签:Hudi,学完,数据管理,时间轴,action,操作,数据 From: https://blog.51cto.com/hiszm/6170095