Lakehouse(湖仓一体)架构是怎么的?
Lakehouse(湖仓一体) 是一种结合了 数据湖(Data Lake) 的灵活性、低成本与 数据仓库(Data Warehouse) 的高性能、易管理性的新型数据架构。
简单来说,它的核心理念是:把数据仓库构建在数据湖之上。
为了让你深入理解,我们可以从演进背景、核心架构分层、关键技术以及优势四个方面来拆解。
1. 为什么会出现 Lakehouse?(演进背景)
在 Lakehouse 出现之前,企业通常面临“两套系统”的痛苦:
- 第一代:数据仓库(Data Warehouse)
- 特点: 存储结构化数据,支持 ACID 事务,SQL 查询快,数据质量高。
- 缺点: 存储成本高,无法处理非结构化数据(视频、音频、日志),不支持机器学习(ML)和数据科学工作流。
- 第二代:数据湖(Data Lake)
- 特点: 基于 Hadoop/S3,存储极其廉价,支持任意格式(结构化、半结构化、非结构化)。
- 缺点: 缺乏事务支持(容易产生脏数据),没有 Schema 约束(容易变成“数据沼泽”),SQL 性能差,更新/删除数据非常困难。
现状: 很多公司不得不维护两套系统——先把数据倒进湖里做 ML,再把处理好的数据 ETL 到仓库里做 BI 报表。这导致了数据冗余、一致性差、维护成本高。
Lakehouse 的目标: 一套数据,既能做 BI(报表),又能做 AI(机器学习),且便宜、可靠。
2. Lakehouse 的核心架构(分层解析)
Lakehouse 的架构通常呈现为“三层夹心饼干”结构:
底层:廉价的云对象存储(Storage Layer)
- 作用: 负责物理存储海量数据。
- 介质: AWS S3, Azure Blob, Google Cloud Storage, 或者私有云的 MinIO / HDFS。
- 文件格式: 通常使用开放的标准文件格式,如 Parquet、Avro、ORC。这些格式压缩率高,且非专有(任何引擎都能读)。
中间层:元数据与表格式层(Metadata / Table Format Layer)—— 这是核心灵魂
- 作用: 这一层把底层的“一堆文件”抽象成了“一张张表”。它赋予了数据湖类似数据库的能力。
- 关键技术(三剑客):
- Delta Lake (Databricks 主推)
- Apache Iceberg (Netflix/Apple 主推,目前最火)
- Apache Hudi (Uber 主推,侧重流式写入)
- 它解决了什么?
- ACID 事务: 保证多个人同时写数据不会乱。
- 时间旅行(Time Travel): 可以查询“昨天下午2点”的数据状态。
- Schema 演进: 允许表结构变更(加列、减列)而不破坏旧数据。
- 索引与优化: 记录文件统计信息(Min/Max),加速查询过滤。
顶层:计算引擎层(Compute Layer)
- 作用: 负责执行 SQL 或代码,进行数据处理和分析。Lakehouse 实现了存算分离,计算引擎可以随意更换。
- 常见引擎:
- 批处理/ETL: Apache Spark
- 交互式查询/BI: Trino (原PrestoSQL), StarRocks, Doris, Impala
- 流计算: Apache Flink
- 机器学习: TensorFlow, PyTorch (直接读取底层数据)
3. 核心特征
一个标准的 Lakehouse 架构必须具备以下特征:
- 事务支持 (ACID): 确保并发读写时数据的一致性,解决了数据湖“脏读”的问题。
- Schema Enforcement (模式强制): 拒绝不符合表结构的数据写入,防止数据沼泽化。
- 存算分离 (Decoupled Storage & Compute): 存储用便宜的 S3,计算用弹性的 EC2/K8s。想存多少存多少,想算多快算多快,互不干扰。
- 开放性 (Openness): 数据以开放格式(Parquet/Iceberg)存储。不像传统数仓(如 Oracle/Teradata)那样被厂商锁定,你可以今天用 Spark 算,明天换 Trino 查,数据不用搬家。
- 支持多种工作负载: 同一份数据,数据分析师用 SQL 做 BI 报表,数据科学家用 Python 做机器学习。
4. 典型的技术栈示例
如果你今天要搭建一个 Lakehouse,你的架构图可能是这样的:
- 存储: Amazon S3 (存放 Parquet 文件)
- 表格式: Apache Iceberg (管理元数据)
- 数据摄入: Apache Flink (实时写入) 或 Spark (批量写入)
- 查询分析:
- Trino / StarRocks: 给 BI 报表工具(Tableau/Superset)提供秒级 SQL 查询。
- Spark / Python: 给算法工程师做模型训练。
5. 总结:Lakehouse 解决了什么痛点?
| 特性 | 数据湖 (Data Lake) | 数据仓库 (Data Warehouse) | 湖仓一体 (Lakehouse) |
|---|---|---|---|
| 数据类型 | 任意(结构/非结构) | 主要是结构化 | 任意 |
| 存储成本 | 低 | 高 | 低 |
| 事务性 (ACID) | 无 | 有 | 有 |
| 数据开放性 | 高 (文件级) | 低 (专有格式) | 高 (开放表格式) |
| 主要用户 | 数据科学家 | 业务分析师 | 两者皆可 |
一句话总结:
Lakehouse 架构就是用数据湖的低成本存储,加上一层智能的元数据管理(Iceberg/Delta),从而获得数据仓库的高级管理能力和高性能查询。