1. 概念
数据湖(Data Lake):
以原始格式(如Parquet、JSON等)存储海量原始数据的存储库,支持结构化、半结构化和非结构化数据(如文本、图像)。采用Schema-on-Read模式,数据在读取时才定义结构,适合机器学习、探索性分析等场景。
2. 与数仓对比
维度 | 数据仓库 | 数据湖 |
---|---|---|
数据存储 | 处理后的结构化数据 | 原始数据(结构化/半结构化/非结构化) |
Schema处理 | Schema-on-Write(写入时定义结构) | Schema-on-Read(读取时定义结构) |
处理流程 | ETL(提取-转换-加载) | ELT(提取-加载-转换) |
用户群体 | 业务分析师、BI工程师 | 数据科学家、数据工程师 |
查询性能 | 高性能,优化用于复杂查询 | 依赖计算引擎(如Spark),灵活性高 |
扩展性 | 垂直扩展为主,成本较高 | 水平扩展,成本较低(基于对象存储) |
数据治理 | 严格的数据质量与元数据管理 | 需额外治理(易成“数据沼泽”) |
典型技术栈 | Snowflake、Redshift、BigQuery(现代云数据仓库) | AWS S3、Azure Data Lake + Spark/Hive |
数据仓库的治理是“被动”的(写入时已结构化),而数据湖的治理是“主动”的(需额外定义元数据和质量规则)。两者的治理目标一致,但数据湖的治理复杂度更高。
2.1 优缺点分析
数据仓库
优点:数据一致性强、查询高效、易于业务用户使用。
缺点:扩展成本高、灵活性差,难以处理非结构化数据。
数据湖
优点:存储成本低、支持多样数据类型、适合探索性分析。
缺点:缺乏内置治理,需额外工具管理元数据和质量(如Apache Atlas、AWS Glue)。
2.2 应用场景
数据仓库:
定期生成标准化报表(如销售月报)。
需要高性能聚合查询的OLAP场景。
数据湖:
机器学习模型训练(需原始数据)。
日志分析、IoT设备数据存储等非结构化处理。
3. Delta Lake与Apache Hudi
两者均属于Lakehouse技术,旨在为数据湖添加数据仓库的管理能力,解决传统数据湖的痛点:
ACID事务:支持并发写入和读一致性。
数据版本控制:时间旅行(Time Travel)功能。
更新/删除:支持CDC(Change Data Capture)场景。
优化查询性能:通过索引、压缩等技术加速分析。
3.1 Delta Lake
背景:由Databricks开源,深度集成Spark生态。
核心功能:
事务日志:通过JSON事务日志(Delta Log)记录所有操作,实现ACID。
Schema演进:支持自动合并Schema变更(如新增列)。
优化工具:OPTIMIZE
命令压缩小文件,Z-Order
优化数据布局。
用例:
流批一体处理(同一张表同时支持流式写入和批量分析)。
机器学习特征存储(支持版本回滚)。
# 将数据保存为Delta格式
df.write.format("delta").save("/data/events")
# 时间旅行查询
spark.read.format("delta").option("versionAsOf", 10).load("/data/events")
3.2 Apache Hudi
3.2.1 定义与定位
Apache Hudi(Hadoop Upserts Deletes and Incrementals)是面向大数据场景的数据湖表格式管理框架,核心目标是解决传统数据湖在数据更新、增量处理、事务支持等方面的不足。其核心能力包括:
- ACID事务保障:支持并发写入与读取的一致性(如避免部分写入失败导致的数据污染)。
- 增量处理(Incremental Processing):仅处理新增或变更数据,避免全量扫描,提升ETL效率。
- 记录级操作:支持Upsert(插入/更新)、Delete操作,适用于CDC(变更数据捕获)场景。
- 时间旅行(Time Travel):保留数据历史版本,支持按时间戳查询历史快照。
3.2.2 技术实现
- 存储优化:
- 数据按基础文件Base File和增量日志Log File组织,增量日志记录变更,定期合并到基础文件。
- 支持Copy-on-Write(写时合并)和Merge-on-Read(读时合并)两种模式,平衡写入延迟与查询性能。
- 索引机制:
内置全局索引(如Bloom Filter、HBase索引),加速记录定位,避免全表扫描。
2.3.3 典型应用场景
- 实时数据入湖:将Kafka流数据实时写入数据湖,并支持更新(如订单状态变更)。
- 数据仓库近实时化:替代传统数仓的T+1批处理,实现分钟级延迟的ETL链路。
- 数据回溯与修正:通过时间旅行修复历史数据错误(如财务对账场景)。
用例:
数据库CDC同步(如MySQL Binlog入湖后更新Hudi表)。
实时数据湖(支持低延迟写入)。
// 写入Hudi表
hoodieWriteConfig = HoodieWriteConfig.newBuilder().withPath("/data/events").build();
JavaRDD<HoodieRecord> records = ...;
client.upsert(records, commitTime);
4. 数据治理
数据治理是架构师构建可持续数据生态的基础。需以业务目标为导向,选择适配的技术工具,同时设计轻量级流程,避免“为治理而治理”,最终实现数据资产的价值释放与风险可控。
数据质量:通过定义规则(如完整性、准确性)和自动化监控(如异常检测)保障数据可靠性。架构上需集成数据清洗工具(如Great Expectations)和实时质量反馈机制。
元数据管理:构建统一的元数据仓库(如Apache Atlas),记录数据来源、定义、血缘关系,支持快速定位数据问题与影响分析。
数据安全与合规:设计细粒度权限控制(如基于RBAC/ABAC模型)、加密(静态/传输中)、脱敏技术,并嵌入合规审计功能(如满足GDPR的“被遗忘权”)。
生命周期管理:制定冷热数据分层策略(如HDFS归档+OSS存储),自动化清理过期数据,降低成本并满足法规要求。
标准化与协作:推动企业级数据模型(如统一ID体系),通过数据目录(如Alation)实现跨部门数据发现与共享,减少冗余。