Apache Hudi 1.2.1 介绍与选型指南

Apache Hudi 1.2.1 湖仓平台认知篇:版本依据、Timeline/索引/并发控制核心概念、功能特性、官方 Spark 快速上手与 Iceberg/Delta/Paimon 选型对比(2026-10-18 联网溯源)

Apache HudiApache Hudi2026/10/18

Apache Hudi 1.2.1 介绍与选型指南

目标:面向数据平台选型读者,梳理 Apache Hudi 1.2.1 的定位、核心概念、功能与湖格式同类对比。本篇为认知篇(A1),关键论断基于官方发行目录/发布博客/GitHub Release 联网溯源并随文标注来源与查询日期(2026-10-18),不做本地安装实测。

一、信息基准

二、软件概述

Apache Hudi 1.2.1(2026-09-24 发布,GitHub Releases)是 Apache 软件基金会开源的「事务型数据湖平台/湖仓表格式」,在对象存储或分布式文件系统上以 Parquet/ORC 等开放列式文件为底座,为数据湖提供记录级插入、更新、删除(upsert/delete)与增量消费能力(hudi.apache.org,2026-10-18 查询)。

  • 定位:面向 CDC 同步、近实时管道与增量 ETL 的湖仓底座,强调「写时管理」的表服务与索引体系。
  • 许可:Apache License 2.0。
  • 社区:GitHub stars 约 6.3k(badgen.net,2026-10-18);ASF 顶级项目,发布节奏稳定(1.2.0 公告 2026-06 → 1.2.1 2026-09 → 1.1.2 维护版 2026-10)。

三、核心架构与核心概念

核心概念(依据 hudi.apache.org 官方文档,2026-10-18 查询):

概念说明
Timeline表的时间线:每次写入/压缩/清理都是一条 instant(动作+状态+时间戳),是增量查询与快照的基础
表类型Copy on Write(COW,写时重写列式文件,读稳定)与 Merge on Read(MOR,写追加日志文件+读时合并,写快读稍重)
文件布局Base File(Parquet/ORC)+ Log File(MOR 增量日志),File Group / File Slice 分层组织
索引记录定位体系:Bloom 索引、Simple/Bucket 索引、外部 HBase 索引;1.x 引入 Record Level Index(记录级索引,官方 1.0 发布材料)
并发控制快照隔离 + OCC/MVCC,配合 Lock Provider( ZooKeeper/数据库/对象存储锁等);1.x 引入 Non-Blocking Concurrency Control(NBCC,官方 1.0 发布材料)
表服务Compaction(日志合并)、Clustering(小文件重整/聚类)、Cleaning(版本清理)、异步执行
元数据表表内元数据(文件清单、列统计、布隆过滤器),支撑数据跳过(data skipping)
查询视图快照读、读优化读(RO)、增量读(incremental pull)与时间旅行
Catalog/存储存储层与计算解耦:HDFS/对象存储;Hive Metastore、AWS Glue 等目录服务

四、功能特性

特性说明(官方文档/发布材料,2026-10-18 查询)
记录级变更upsert、delete、patch 等写入操作;主键模型下的行级更新
增量消费基于时间线的增量拉取,喂给下游增量 ETL
多引擎读写Spark(3.3–4.1,官方 quick-start 实查)、Flink、Java API;Trino 连接器随 1.2.1 移入主仓库(RFC-105,hudi-trino,按 Trino 483/JDK 25 构建,1.2.1 Release Notes)
SQL 能力Spark SQL/Flink SQL 的 CREATE TABLE USING HUDI、UPDATE/DELETE/MERGE INTO(官方 quick-start)
表格式/演进Schema 演进、分区演进相关能力(官方 docs 表格式章节)
表服务自动化异步 compaction/clustering/cleaning,缓解小文件与读放大
CDC/近实时Flink CDC → Hudi 的近实时入湖管道是典型用法(官方博客/文档)
1.2.1 新变化Trino 打包调整(hudi-trino-bundle 停发,改发非 shaded 的 hudi-trino,1.2.1 Release Notes)

五、快速上手(引自官方文档,不本地实测)

以下命令引自官方 Quick Start Guide(来源:https://hudi.apache.org/docs/quick-start-guide/ ,2026-10-18 查询,支持 Spark 3.3–4.1、Scala 2.12/2.13):

export SPARK_VERSION=3.5
export HUDI_VERSION=1.2.1
export SCALA_VERSION=2.13
spark-sql --master "local[2]" \
  --packages org.apache.hudi:hudi-spark$SPARK_VERSION-bundle_$SCALA_VERSION:$HUDI_VERSION \
  --conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer' \
  --conf 'spark.sql.catalog.spark_catalog=org.apache.spark.sql.hudi.catalog.HoodieCatalog' \
  --conf 'spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension' \
  --conf 'spark.kryo.registrator=org.apache.spark.HoodieSparkKryoRegistrar'

建表与写入(官方 quick-start SQL 示例节选):

-- 创建分区 Hudi 表
CREATE TABLE hudi_table (
    ts BIGINT, uuid STRING, rider STRING, driver STRING,
    fare DOUBLE, city STRING
) USING HUDI
PARTITIONED BY (city);

-- 插入数据
INSERT INTO hudi_table VALUES (1695159649087,'334e26e9-8355-45cc-97c6-c31daf0df330','rider-A','driver-K',19.10,'san_francisco');

-- 行级更新
UPDATE hudi_table SET fare = 25.0 WHERE rider = 'rider-D';

-- MERGE INTO 合并写入
MERGE INTO hudi_table AS target USING fare_adjustment AS source
ON target.uuid = source.uuid
WHEN MATCHED THEN UPDATE SET target.fare = target.fare + source.fare
WHEN NOT MATCHED THEN INSERT *;

六、适用场景与限制

适用场景:

  • 数据库 CDC 到湖:高频 upsert、删除标记同步,要求记录级准确性。
  • 增量 ETL/近实时数仓:下游按增量消费,替代「每天全量重算」。
  • 合规与数据修正场景:GDPR 式删除、回填、行级纠错。
  • 与 Spark/Flink 深度集成的湖仓平台。

限制与注意:

  • 表服务(compaction/cleaning/clustering)与索引选型带来运维复杂度,需要按写入模式调参。
  • 多引擎访问需对齐 bundle/connector 版本(如 1.2.1 的 Trino 打包变更即影响升级路径,1.2.1 Release Notes)。
  • 与 Iceberg/Delta 的「表格式」对比中,Hudi 更偏「写时管理」平台,跨引擎中立接入需评估各引擎适配成熟度。

七、同类选型对比

同类:数据湖表格式/湖仓平台。数据来源:各官网/仓库/releases.atom,stars 来自 shields.io/badgen.net(2026-10-18 查询)。

项目许可社区活跃度(stars/最近发版)版本节奏引擎生态
Apache Hudi 1.2.1Apache-2.0约 6.3k;1.2.1(2026-09-24)/1.1.2(2026-10-17,releases.atom)minor 约 3~6 个月,维护线并行 patchSpark 3.3–4.1、Flink、Trino(官方 quick-start/1.2.1 notes)
Apache Iceberg 1.12.0Apache-2.0约 9.3k(shields.io);1.12.0(2026-09-30,releases.atom)约每季度 minorSpark 3.5/4.0/4.1、Flink、Trino、Hive、Doris/StarRocks 等多引擎(官方文档)
Delta Lake 4.4.1Apache-2.0约 9k(shields.io);4.4.1(2026-10-05,releases.atom)稳定滚动以 Spark(Databricks 系)为中心,Flink/Trino 等连接器外围
Apache Paimon 2.1.0Apache-2.0约 3.4k(shields.io);2.1.0(2026-10-12,releases.atom)minor 快速迭代Flink 原生流式湖仓,Spark/Hive/Trino 支持持续增强(官方文档)

兼容矩阵(要点):

维度Hudi 1.2.1Iceberg 1.12.0Delta Lake 4.4.1Paimon 2.1.0
更新模式行级 upsert/delete 原生(索引体系)v2 equality/positional delete行级 MERGE/DELETE行级更新(主键表,LSM 风格)
流式写入Flink 流式入湖、增量消费成熟Kafka/流式入湖 + 增量读Structured StreamingFlink 流式原生、changelog 语义
引擎中立性中立(Spark/Flink 为一等)高(最广泛的多引擎接入)偏 Spark 生态偏 Flink 生态
运维抓手表服务丰富但需调参需配套维护过程(compaction/快照过期)Databricks 管控强,OSS 版需自理内建 LSM 自动合并较省心

一句选型建议:重 upsert/CDC/增量管道且主引擎是 Spark/Flink 选 Hudi;要「一表多引擎、开放标准」的湖仓中立底座选 Iceberg;Spark 中心化且未来可能上 Databricks 选 Delta;Flink 重度流式湖仓选 Paimon。

八、参考链接