湖仓一体是什么
湖仓一体(Lakehouse)是在数据湖的廉价存储上叠加一层表格式,把数据仓库才有的能力搬过来:表级事务、schema 演进、快照与时间旅行。这样同一份数据既能被批处理引擎写,也能被交互查询引擎直接读,不必为了性能再复制一份到仓库里。关键不在存储本身,而在于表格式提供的元数据协议与多引擎互操作能力。
三代形态对比
| 能力 | 传统数据仓库 | 数据湖 | 湖仓一体 |
|---|---|---|---|
| 存储成本 | 高(纵向扩展) | 低(对象存储) | 低 |
| 事务一致性 | 强 | 弱(文件级) | 表级快照与事务 |
| 数据类型 | 结构化为主 | 任意类型 | 结构化为主并支持半结构化 |
| 典型生态 | 商业 MPP | HDFS 直读 | Iceberg/Hudi/Delta + 多引擎 |
| 典型运维 | 扩容与调优 | 目录与小文件治理 | 表维护:快照过期与合并 |
湖仓读写路径示意
湖仓读写路径示意
Spark/Flink 写入 → 表格式(快照/日志) → Trino/Spark 查询
批写流读、流写批读的混合场景由表格式的元数据层保证一致性基本信息
| 核心组件 | 对象存储 + 表格式(Iceberg/Hudi/Delta)+ 多计算引擎 |
|---|---|
| 关键能力 | ACID 事务、schema 演进、时间旅行、增量读 |
| 必须配套 | 快照过期、小文件合并、元数据清理等维护任务 |
| 常见引擎 | Spark、Flink、Trino、Presto 等 |
| 选型关注 | 社区活跃度、引擎兼容性、元数据管理方式 |
典型使用场景
- 一表多引擎:同一张表既做批处理又做交互式查询,避免数据复制
- 流批一体写入:流任务持续写入,离线任务按快照读取稳定版本
- 准实时数仓:ODS 到 DWD 都在湖上完成,减少链路转换次数
- 数据回溯:按快照读取历史版本,定位问题数据是何时进入的
- 存算分离:计算集群随时扩缩,存储与元数据长期保留
湖仓的核心不是存储本身,而是表格式提供的元数据协议与多引擎互操作。
表格式带来的能力都要靠维护任务兑现:快照不清理元数据会持续膨胀,小文件不合并查询会越来越慢,这两件事需要写进日常调度而不是等出问题再补。