说实话,我刚开始听到"数据湖"这个词也懵,以为是多高大上的东西。干了几年数据才发现,其实就是个"大杂烩仓库"。


先讲个真事:老刘是怎么被数据搞崩溃的

我兄弟老刘,某电商公司负责人。2022年业务暴涨,他天天跟我吐槽三件事:

第一,用户行为日志存不进去。 每天500GB的JSON日志,字段还不固定,今天有"设备型号",明天又冒出个"设备指纹",MySQL根本建不了表。

第二,商品图片往哪塞? 数仓只收表格数据,图片视频这种"非结构化"的,人家不收。

第三,算法团队要原始数据。 但数仓里的数据已经被ETL洗过N遍了,原始点击流早没了,算法团队气得直拍桌子。

老刘的困境,就是数据湖要解决的问题。


一句话说清:数据湖就是个"大湖泊"

我打个比方你就懂了。假设你们公司是个餐厅:

对应技术里面放的是什么?有什么特点?主要给谁用?
数据库
(MySQL/Oracle)
洗净切好的肉丝、配好的调料
*(高度标准化的结构化数据)*
极快、空间极小。手一伸就够到,放的是当下正炒这盘菜需要的最新鲜食材,反映当前状态。炒菜大厨
*(业务系统/开发)*
数据仓库
(Hive/ClickHouse)
按固定菜谱提前配好的半成品
*(经过清洗、加工、建模的历史数据)*
标准、量大。拿取需要走两步去冷库(稍慢),但拿回来直接下锅,就能稳定出标准的硬菜。餐厅经理/质检员
*(数据分析师/BI报表)*
数据湖
(S3/HDFS/Iceberg)
带泥的土豆、没杀的整猪、甚至不知道能不能吃的野菜
*(全类型、未加工的原始数据)*
海量、极低成本。啥都能往里扔,不管三七二十一先囤着,等以后想做新菜了,再去里面翻找处理。研发新菜的主厨
*(算法工程师/数据科学家)*

核心区别就一句话:

  • 数据库&数仓:先收拾干净,才能进来

  • 大湖泊:先倒进来,用的时候再收拾


Schema-on-Read 是个啥?别被术语吓到

这是数据湖最本质的特点。我举个例子:

传统数仓的做法(Schema-on-Write):

-- 先建表,字段必须提前定死
CREATE TABLE sales (
    order_id INT,
    amount DECIMAL(10,2)
);
-- 数据必须符合这个结构,不然滚蛋

数据湖的做法(Schema-on-Read):

# 直接扔进来,不管结构
{"user_id": "U123", "action": "click", "extra": {"x": 100, "y": 200}}

# 用的时候再决定取啥字段
df = spark.read.json("s3://data-lake/events/")
df.select("user_id", "action").show()  # 今天分析这个
df.select("user_id", "extra").show()   # 明天分析那个,不用改表

人话翻译:

  • 数仓 = 先装修再入住,没装修好的房子不让进

  • 数据湖 = 先入住再装修,住进去了按需收拾


三种存储到底啥区别?

对比项数据库数据仓库数据湖
给谁用开发小哥写业务代码BI分析师出报表算法工程师搞模型
收啥数据规整的表格清洗过的表格啥都收:表格、日志、图片、视频
啥时候定格式写入时写入时读取时才定
存多少钱中等(专有硬件)便宜(云存储几分钱/GB)
查多快毫秒级秒级分钟级(看计算引擎)
典型场景下单、转账月度经营分析机器学习、用户画像、推荐系统

一句话定位:

  • 数据库:让业务跑起来

  • 数据仓库:让老板更加看清楚过去

  • 数据湖:让算法探索未来可能性


数据湖到底好在哪?4个真香时刻

1. 打破数据孤岛,一处存储到处用

以前视频团队存OSS、日志团队存ES、业务团队存MySQL,各玩各的。数据湖直接统一扔S3上:

  • 结构化数据 → Spark SQL查

  • 文本日志 → Spark NLP分析

  • 图片视频 → PyTorch直接读

2. 省钱!PB级数据也能养得起(仅供参考~ )

方案大概啥水平
商业数仓(Teradata)贵得离谱,大概是对象存储的几十倍
云数仓(Snowflake)中等偏贵,大概是对象存储的5-10倍
对象存储(S3/OSS)便宜到离谱,几分钱1GB

100TB数据,存商业数仓一年烧的钱,够在对象存储上存十几年的。如果迁到数据湖,存储成本直接砍到原来的十分之一左右~

3. 原始数据全保留,不丢任何信息

真实案例: 某金融公司存了5年交易日志,当初只觉得"操作耗时"这字段没用,ETL时给扔了。结果两年后风控团队发现,这个字段能训练反欺诈模型,识别异常操作模式。早扔早后悔,数据湖全量保存就没这问题。

4. AI时代的刚需

搞机器学习需要原始特征,数仓给的是聚合指标(比如"用户平均停留时长"),算法要的是原始行为("几点几分暂停了、快进到哪里")。只有数据湖能低成本存这些细粒度数据

某视频平台直接用原始观看行为训练推荐模型,点击率比用数仓聚合数据提升了23%。


数据湖最适合干啥?3个典型场景

场景1:推荐系统(多模态数据混存)

短视频平台要分析:用户画像(表格)+ 点击日志(JSON)+ 视频内容(文件)+ 背景音乐(音频)。

传统做法: 拆4个系统存,联合分析头大。

数据湖做法: 统一扔Iceberg格式,Spark一站式处理,算法团队直接在上面跑PyTorch。

App埋点 → Kafka → Flink实时写入 → 数据湖
                              ↓
                    离线:Spark SQL分析
                    实时:Flink特征工程 → 在线模型

场景2:物联网监控(海量时序数据)

10万辆车每秒上报传感器数据,PB级爆发。

分层存储策略:

  • 热数据(7天内):SSD加速,实时监控

  • 温数据(7-90天):标准存储,趋势分析

  • 冷数据(90天+):归档存储,成本再降80%,故障时追溯用

场景3:合规审计(长期归档)

金融监管要求存5-10年流水,平时没人查但不敢删。存数仓太贵,扔数据湖归档,成本降90%,审计时随时调取


数据湖的3个大坑,踩过才知道疼

坑1:数据沼泽(Data Swamp)

症状: 湖里有几PB数据,但没人知道有啥、质量咋样、找谁申请。最后变成"垃圾场",不敢用、不敢删。

怎么避:

  1. 入湖必须登记:owner是谁、干啥用的、多久更新

  2. 上元数据管理工具(Apache Atlas、DataHub)

  3. 定期清理"僵尸数据"(没owner、半年(具体参考公司实际情况)没人访问的)

行业数据:67%的企业搞数据湖都遇到过治理问题,别觉得自己能幸免。

坑2:查询慢得要死

症状: 业务方说"查个数等10分钟",还不如用数仓。

优化方法:

  1. 文件格式换成Parquet/ORC(列式存储,查得快)

  2. 热数据预聚合,冷数据保持原始

  3. 上Iceberg/Delta Lake/Hudi,查询速度能快3-5倍

坑3:技术栈太复杂

Spark、Flink、Presto、Hive一堆组件,小公司根本养不起运维团队。

解法: 直接用托管服务

  • AWS Lake Formation

  • 阿里云数据湖构建(DLF)

  • Databricks(免运维,但贵点)


Lakehouse:现在的主流玩法

简单说: 数据湖 + 数仓的能力 = Lakehouse(湖仓一体)

以前数据湖缺啥?事务支持(ACID)、数据质量、查询性能。现在有了开放表格式,补齐了这些短板。

表格式特点适合谁
Apache Iceberg生态最开放,Flink/Spark/Trino都能用不想被厂商绑定的
Delta LakeSpark生态最强,Databricks深度集成已经用Spark的
Apache Hudi实时更新最强,CDC场景首选要实时同步MySQL变更的

选型建议:

  • 初创公司/技术栈杂 → Iceberg

  • Spark重度用户 → Delta Lake

  • 实时数仓场景 → Hudi


那么你的场景该用啥?

搞数据架构别想太复杂,问自己这几个问题就行:

1. 你的数据都是规规矩矩的表格吗?字段固定不变?

  • 是 → 直接用传统数仓(MySQL/ClickHouse),简单省事

  • 不是 → 往下看

2. 有没有图片、视频、日志这些乱七八糟的数据?

  • 有 → 必须上数据湖,数仓不收这些

  • 没有 → 往下看

3. 数据量多大?

  • 超过10TB → 数据湖或Lakehouse,成本低

  • 没超过 → 往下看

4. 主要干啥用?

  • 每天固定报表 → 数仓,开发快性能好

  • 探索性分析、搞机器学习 → 数据湖,灵活

5. 需要实时更新还要强一致性吗?

  • 要 → Lakehouse(Iceberg/Delta/Hudi)

  • 不要 → 普通数据湖就行


更简单粗暴的版本

你的情况选啥
就几张表,每天跑报表MySQL/ClickHouse
数据杂、量大、要搞AI数据湖
既要报表又要AI还要实时Lakehouse
不知道以后要干啥数据湖,先囤着总没错

老刘最后怎么选的?

  • 用户行为日志(JSON,量大)→ 扔数据湖

  • 实时推荐要原始数据 → 数据湖直接读

  • 固定经营报表 → 从数据湖抽数到ClickHouse出报表

湖仓并存,各干各的。


说点实在的

数据湖不是来取代数仓的,是填补空白

  • 热数据、固定报表 → 数仓

  • 冷数据、探索分析、AI训练 → 数据湖

现代架构趋势是"湖仓并存",通过Lakehouse技术逐渐融合。理解区别比盲目追新重要。

想动手试试?

  • 本地玩:Docker搭MinIO + Spark + Iceberg

  • 云上玩:AWS S3 + Athena(无服务器,按查询付费)

  • 托管玩:Databricks Community Edition(免费)

最后,欢迎各位大佬批评指正~

更多推荐