首页/数据/数据工程与 ETL 速查/数据湖概念与典型组成
管道基础52 条

数据湖概念与典型组成

数据湖用集中式存储(HDFS/对象存储)保存原始与加工数据,schema 在读时确定;由存储层、表格式层与计算引擎三层组合而成。

数据湖是什么

数据湖把原始与加工后的数据集中放在廉价的分布式存储上(HDFS、S3、OSS 等),schema 在读时确定,因此可以先入库、后建模。它由三层组合而成:存储层负责容量与成本,表格式层(Iceberg、Hudi、Delta)负责事务、快照与元数据管理,计算层(Spark、Flink、Trino)按需读取。与数据仓库的区别主要是「写时建模」变成「读时建模」,代价是查询性能与治理要额外补齐。

基本信息

存储层HDFS、S3、OSS 等对象存储,成本低、容量大
表格式层Iceberg、Hudi、Delta 提供事务与元数据管理
计算层Spark、Flink、Trino 等按需读取
建模时机schema on read,读取时才绑定结构
治理要点分区规范、生命周期、元数据目录、权限边界

为什么要分层

没有目录规范与治理的数据湖会退化成「数据沼泽」:重复数据、口径不一、找不到可信来源。落地区、清洗区、应用区分层是必要约定,分层的同时也要明确每一层由谁写入、保留多久、下游能依赖哪一列作为分区键。

分区目录示意

分区目录示意
s3://lake/landing/orders/2026/10/11/              原始落地
s3://lake/curated/dwd/orders/dt=2026-10-11/      清洗明细
s3://lake/marts/ads/sales_daily/dt=2026-10-11/   应用结果

典型使用场景

  • 统一存放原始日志与业务数据,先用低成本存储保底,再做后续加工
  • 一份数据多引擎共用:批处理用 Spark、交互查询用 Trino,不必各自复制一份
  • 增量更新与时间旅行:Iceberg、Hudi 支持按快照读取历史版本
  • 海量冷数据归档:把不常访问的明细留在湖里,仓库只保留聚合结果
  • 机器学习特征准备:原始数据直接读取,减少一次落地转换

常见误区对照

做法后果改进方向
不分层、任意路径写入找不到可信数据源,重复计算固定 landing/curated/marts 三段
过度分区(按小时再按字段拆)小文件激增,LIST 与元数据开销大按实际查询条件收敛分区粒度
不做生命周期管理存储成本持续上升按访问频率设置归档与清理策略
小文件长期不合并查询扫描与打开文件开销放大周期性 compact 或写入时控制文件大小
对象存储上的 rename 是拷贝加删除,成本与耗时都随文件大小上升;小文件与过度分区会显著放大这一代价,写入路径尽量做到一次成型而不是反复搬移。

易错点

  • 把数据湖当「所有数据的垃圾桶」而不设生命周期,成本与治理负担会快速上升
  • 对象存储 LIST 操作费用与延迟都要考虑,避免每次全量列举目录
  • 以为对象存储是文件系统,依赖 rename 做原子切换,结果出现半成品数据被读到
  • 没有表格式层就直接在目录上做删除更新,多写入方并发时极易互相覆盖
  • 分区字段与查询条件不一致,过滤条件无法裁剪,扫描量远超预期

数据来源与参考

  • AWS 官方文档:What is a Data Lake
  • Apache Iceberg 官方文档:Introduction
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌