一、Hudi介绍
1.1 Hudi的定义:
????????Apache Hudi是一种开源的数据湖表格式框架。Hudi基于对象存储或者Hdfs组织文件布局,保证ACID,支持行级别的高效更新和删除,从而降低数据ETL开发门槛。同时该框架支持自动管理及合并小文件,保持指定的文件大小,从而在处理数据插入和更新时,不会创建过多的小文件,引发查询端性能降低,避免手动监控和重写小文件的运维负担。结合Flink、Presto、Spark等计算引擎进行数据入湖和计算分析,常用来支持DB入湖加速、增量数据实时消费和数仓回填等需求。
1.2 Hudi特性
- 支持ACID:支持ACID语义,提供事务的线性隔离级别。
- 支持UPSERT语义:UPSERT语义即就是INSERT和UPDATE两种语义的合并。在UPSERT语义时,如果记录不存在则插入;如果记录存在则更新。通过INSERT INTO语法可以大幅简化开发代码的复杂度,提升效率。
- 支持Data Version:通过时间旅行(Time Travel)特性,提供任意时间点的数据版本历史,便于数据运维,提升数据质量。
- 支持Schema Evolution:支持动态增加列,类型变更等Schema操作。
二、概要
2.1 TimeLine
????????Hudi 的核心是维护timeline 在不同时间对表执行的所有操作,instants 这有助于提供表的即时视图,同时还有效地支持按到达顺序检索数据。Hudi Instant 由以下组件组成
- Instant action:在表上执行的操作类型
- Instant time:即时时间通常是一个时间戳(例如:20190117010349),它按照动作? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (action)开始时间的顺序单调递增。
state : 时刻(事件)的当前状态
Hudi 保证在时间轴上执行的动作是原子的并且基于即时时间的时间轴是一致的。
action的主要操作包括:
- commits:表示将一批记录原子写入表中。
- cleans:清除表中不再需要的旧版本文件的后台活动。
|