【数据湖】一文了解啥是数据湖~
说实话,我刚开始听到"数据湖"这个词也懵,以为是多高大上的东西。干了几年数据才发现,其实就是个"大杂烩仓库"。
先讲个真事:老刘是怎么被数据搞崩溃的
我兄弟老刘,某电商公司负责人。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数据,但没人知道有啥、质量咋样、找谁申请。最后变成"垃圾场",不敢用、不敢删。
怎么避:
-
入湖必须登记:owner是谁、干啥用的、多久更新
-
上元数据管理工具(Apache Atlas、DataHub)
-
定期清理"僵尸数据"(没owner、半年(具体参考公司实际情况)没人访问的)
行业数据:67%的企业搞数据湖都遇到过治理问题,别觉得自己能幸免。
坑2:查询慢得要死
症状: 业务方说"查个数等10分钟",还不如用数仓。
优化方法:
-
文件格式换成Parquet/ORC(列式存储,查得快)
-
热数据预聚合,冷数据保持原始
-
上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 Lake | Spark生态最强,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(免费)
最后,欢迎各位大佬批评指正~
更多推荐
所有评论(0)