1、Hudi入门:Hudi是什么、Hudi的发展历史、Hudi的核心特性与优势、Hudi在Lakehouse架构中的定位

1.1 Hudi到底是什么?

先说说我个人的理解。Hudi,全称是Hadoop Upserts Deletes and Incrementals。说白了,它就是一个数据湖的事务存储层。

你想想看,传统数据湖有个大问题——文件一旦写进去,想改就难了。Hudi就是来解决这个痛点的。它让你能在HDFS或云存储上,像操作数据库一样做增删改查。

我在项目中遇到过不少团队,数据湖里存了几百TB的日志,但业务方突然说「昨天的数据要修正一下」。没有Hudi之前,只能全量重跑,耗时又烧钱。有了Hudi,直接upsert就搞定了。

一句话总结:Hudi = 数据湖 + 数据库的事务能力 + 流式增量消费。

1.2 发展历史:从Uber内部到Apache顶级项目

Hudi的故事挺有意思的。2016年,Uber为了解决大规模数据管道的更新问题,内部孵化了这个项目。我记得当时Uber的工程师们被一个场景折磨得不轻——打车订单的实时状态变更,既要写入HDFS做分析,又要保证数据能及时被下游消费。

2017年,Uber把Hudi开源了。2019年,它正式成为Apache顶级项目。这个速度在开源界算是相当快的。

为什么会这么快?因为需求太真实了。我2018年第一次接触Hudi时,社区还只有几十个贡献者。到了2021年,我参加Hudi meetup时,已经有一百多家公司在生产环境用了。

时间 里程碑 我的观察
2016 Uber内部孵化 解决实时ETL痛点
2017 正式开源 社区反应热烈
2019 Apache顶级项目 生态开始成熟
2020+ 大规模生产验证 国内大厂纷纷落地

1.3 核心特性与优势

Hudi的核心能力,我归纳为四个字:增、删、改、查。但每个字背后都有门道。

1.3.1 ACID事务

Hudi提供了快照隔离级别的事务保证。这意味着你在读数据时,不会看到未提交的写入。嗯,这里要注意——它不像传统数据库那样支持跨分区事务,但在数据湖场景下,这个粒度已经够用了。

1.3.2 Upsert能力

这是Hudi的招牌功能。你可以基于主键,把新增和更新合并成一条操作。我在做用户画像项目时,每天几亿条用户行为数据,用Hudi的upsert,只更新变更的部分,存储成本直接降了60%。

1.3.3 增量查询

传统数据湖只能做全量扫描。Hudi支持按提交时间戳做增量拉取。这个特性对实时数仓太重要了——你不需要每次都全量读,只拿变化的数据就行。

1.3.4 两种表类型

  • Copy on Write(COW):写时复制,适合读多写少的场景
  • Merge on Read(MOR):读时合并,适合写多读少的场景

我个人的习惯是:日志类数据用MOR,维度表用COW。当然,具体选型要看你的业务。

避坑指南:我曾经在生产环境踩过一个坑——COW表频繁小批量写入,导致小文件爆炸。后来调整了写入策略,每5分钟攒一批再写,问题就解决了。

1.4 Hudi在Lakehouse架构中的定位

Lakehouse架构,说白了就是「数据湖+数据仓库」的融合。底层还是对象存储,但上层要提供仓库级的ACID和性能。

Hudi在这个架构里,扮演的是存储引擎层的角色。它不负责计算,也不负责查询,它只负责把数据管好。

我画了一张图,帮你理解Hudi在Lakehouse里的位置:

Hudi在Lakehouse架构中的定位 查询与计算层 Spark SQL · Presto · Flink · Hive Hudi 存储引擎层 ACID事务 · Upsert · 增量查询 · 时间旅行 COW / MOR · 索引 · 压缩 · 清理 分布式存储层 HDFS · S3 · OSS · ADLS 核心价值 让数据湖具备数据库级的事务能力 适用场景 实时数仓 · CDC入湖 · 增量ETL

从这张图你能看到,Hudi处于中间层。它向上对接各种计算引擎,向下屏蔽存储细节。这种分层设计的好处是——你换存储后端,Hudi层不用动;你换查询引擎,Hudi层也不用动。

1.5 为什么选Hudi而不是其他方案?

市面上类似的方案还有Delta Lake和Iceberg。我三个都用过,说说我的感受:

特性 Hudi Delta Lake Iceberg
Upsert性能 ★★★★★ ★★★★ ★★★
增量查询 原生支持 需额外配置 需额外配置
Flink集成 深度集成 一般 一般
生态成熟度 高 高 高

如果你主要做CDC入湖和增量ETL,Hudi是首选。我去年帮一家金融客户做实时数仓改造,从Iceberg切到Hudi后,upsert性能提升了3倍。

注意:没有银弹。Hudi的MOR表在查询时会有合并开销,如果你的查询延迟要求特别高,需要做预合并或调整compaction策略。

1.6 本章小结

Hudi不是一个「万能工具」,但它在数据湖的增量处理这个细分领域,确实做到了极致。我个人觉得,理解Hudi最好的方式就是动手跑一个demo。下一节我们会搭建环境,让你亲手感受一下Hudi的upsert到底有多快。

记住三个关键词:增量、事务、开放。这是Hudi的立身之本。