跳到主要内容

湖仓一体

问题

什么是湖仓一体(Lakehouse)?如何选择表格式?

答案

架构演进

湖仓一体 = 数据湖的低成本存储 + 数据仓库的管理能力

湖仓一体架构

表格式选型

场景推荐理由
多引擎、厂商中立Iceberg最广泛的引擎支持
Databricks 生态Delta Lake原生深度集成
CDC / 频繁 UpsertHudiUpsert 性能最强
新项目选型Iceberg社区增长最快、最开放

表格式综合对比

维度IcebergDelta LakeHudi
开源方ApacheDatabricksUber → Apache
ACID
时间旅行
Schema 演进✅ 强⚠️ 有限
分区演进✅ 强⚠️ 有限⚠️ 有限
隐藏分区
Upsert⭐⭐⭐⭐⭐
增量读取⭐⭐⭐⭐⭐
多引擎Spark/Flink/Trino/DorisSpark 为主Spark 为主
趋势📈 增长最快稳定稳定
2024+ 趋势
  • Iceberg 成为事实标准:各大引擎竞相支持
  • 表格式互通:Delta Lake UniForm 可兼容读 Iceberg/Hudi
  • 存算分离:Lakehouse 天然适合云原生
  • 流批一体:Flink + Iceberg/Hudi 实现实时湖仓

典型湖仓架构方案

组件推荐选型
存储S3 / OSS / MinIO
表格式Apache Iceberg
CatalogHive Metastore / AWS Glue / Nessie
批处理Spark
流处理Flink
OLAP 查询Trino / Doris / StarRocks
BI 工具Superset / Metabase

常见面试问题

Q1: 为什么不直接用数据仓库?

答案

痛点数据湖/湖仓的解决方案
仓库存储贵用 S3 存储,成本降低 10~100x
只能存结构化数据数据湖支持任意格式
厂商锁定开放格式 + 开源引擎
实时能力差Flink + 表格式实现实时

Q2: Lakehouse 有什么挑战?

答案

  • 性能不如专用数仓:查询延迟通常高于 ClickHouse/Doris
  • 架构复杂度:需要管理存储、表格式、引擎多个组件
  • 人才门槛:团队需要掌握多个技术栈
  • 小文件问题:流式写入产生大量小文件,需要定期治理

Q3: Catalog 的作用是什么?

答案: Catalog 是表的注册中心,负责管理表的元数据(位置、Schema、快照)。

  • Hive Metastore:传统方案,广泛兼容
  • AWS Glue:AWS 托管服务
  • Nessie:支持 Git-like 分支管理的 Catalog
  • REST Catalog:Iceberg 标准 REST API

相关链接