这是我参与「第四届青训营 」笔记创作活动的的第11天
一、发展历史
什么是数据仓库?
- 数据仓库将数据从数据源提取和转换,加载到目的地
- 数据仓库存储+计算不分离
- 数据仓库严格控制写入数据的schema
湖仓体(数据湖的现状)
- 结合了数据湖和数据仓库的优势
- 将数据仓库中对于数据的严格管理直接实现到了低成本的分布式存储之上
- Key Features:
- Transaction ACID
- Schema管理
- 存储计算分离
- 支持多种计算3 |擎和文件格式
业界三大数据湖
Delta Lake、Hudi 与 Iceberg
二、核心技术
文件结构
写入数据湖时
- 按照每条数据的date进行分区
- 额外使用metadata文件记录表信息,如右图所示
Time travel
要点:
- 每次写入都生成- -个新的元数据文件,记录变更
- 分区数据在Update时,不要删除旧数据,保证新旧共存
- 元数据中存储具体的文件路径,而不仅仅是分区文件夹
Transaction
数据湖中的ACID:
- Atomicity: 原子性 本次写入要么对用户可见,要么不可见(需要设计)
- Consistency: 一致性 输入是什么,落盘的就是什么(由计算引擎保证)
- Isolation: 事务隔离 正确解决读写冲突和写写冲突(需要设计)
- Durability: 持久性 落完数据后,即便服务器重启结果不变(由存储引擎保证)
三、各有所长
Iceberg工作重点
用户体验
- Schema evolution
- Partition evolution
- Hidden partition
- Time Travel
- Version Rollback
性能
- 快速file plan
- 更多的filter方式
可靠性
- ACID Transaction
- 完全开源,由Apache孵化开发
Hudi
Hudi工作重点:
- Timeline service: Hudi 管理transaction的方式
- Hudi Table Type: Copy on Write / Merge on Read
- 高效的Upserts: update or insert
- 索引表:快速定位一条数据的位置
- Streaming Ingestion Service
- 完全开源,由Apache孵化
Delta Lake工作重点
ACID Transaction
- Schema 校验(不是evolution)
- 流批一体
- Time Travel
- Upsert/Delete
- Z-Order 优化
- 只开源了一部分,由Databricks自己主导开发,Z-order 等优化的实现未开源
四、总结场景⭐⭐⭐
技术选型 短期来看:每个项目都有一些属于自的功能;
- 如果强需求Upserts,也许Hudi是 最好的选择
- 如果希望可扩展性强,那么设计优良的lceberg是最好的选择
- 如果希望用上Z-Order等优化,那么掏钱买Databricks 的企业版Delta是不二之选
长期来看:数据湖取代Hive,成为HDFS_上的表格式标准是必然的, 在选择之前问自己四个问题:
- 我需要的feature在哪个数据湖上是最稳定的
- 哪一个数据湖能够用最简单的接入方式(SQL) 用上最完善的功能
- 哪一个数据湖有计算引擎侧的支持和社区的支持
- 哪一个数据湖的版本管理做的最好