Hudi

ApacheHudi

Apache Hudi(Hadoop Upsert Delete and Incremental)是一个开源的数据管理框架,用于简化增量数据处理和数据管道开发。

该框架通过对存储在S3中的Hudi数据集进行记录级别的更新和删除,为基于Hadoop的数据湖带来了ACID合规性。

Hudi特性

  • 带有快速、可插拔索引的Upserts、Deletes。

  • 增量查询、记录级别的变更流。

  • 事务、回滚、并发控制。

  • 自动文件大小调整、数据聚类、压缩、清理。

  • 流式摄取、内置CDC源和工具。

  • 向后兼容的模式演化和强制执行。

  • 从Spark读写,从Presto、Trino、Hive等读取。

存储类型

  • Hudi 数据集由一个索引组成,该索引将行映射到 S3 中的单个文件; 以及一个timeline,该时间线记录对该数据集所做的单个更改。

  • Hudi 架构中没有持久化守护进程,所有这些项目(索引、数据文件和元数据)都存储在 S3 中。

  • Hudi 数据集可以使用 Hive、Flink、Presto 和 Spark 进行读取。

Hudi 支持以下表类型。

  • Copy On Write : 使用专门的列式文件格式(例如 parquet)存储数据。更新只需要版本化和重写文件,通过执行同步合并来完成。 CoW 表非常适合读密集型工作负载。

  • Merge On Read : 使用列式(例如 parquet)和行式(例如 avro)文件格式的组合存储数据。更新被记录到增量文件中,并稍后同步或异步地被压缩到生成新版本的列式文件中。 MoR 表非常适合写密集型工作负载。

下表总结了这两种表类型之间的权衡:

权衡 CopyOnWrite MergeOnRead
数据延迟 更高 更低
查询延迟 更低 更高
更新成本(I/O) 更高(重写整个 parquet) 更低(追加到增量日志)
Parquet 文件大小 更小(高更新(I/0)成本) 更大(低更新成本)
写放大 更高 更低(取决于压缩策略)