数据湖三剑客(二) | 青训营笔记

124 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的第8天

主要介绍三个目前主流的数据湖:Iceberg、Hudi、Delta Lake。

3 各有所长

3.1 IceBerg工作重点

用户体验:

  • Schema Evolution
  • Partition Evolution
  • Hidden Partition
  • Time Travel
  • Version Rollback

性能:

  • 1.快速file plan
  • 2.更多的filter方式

可靠性:

  • ACID Transaction

3.1.1 Well-designed Metadata Layer

Metadata files: 定义了表结构,存储了snapshot信息,分区列信息等

Mainfest lists:存储了一个snapshot中所有的manifest的信息

Mainfests: 存储了一些data files的信息

Data files: 就是具体的数据文件

image.png

3.1.2 Data File Filter

一些有助于filter的数据被层层记录:

  • Manifest file 记录了每个data file的分区范围
  • Manifest list 记录了每个manifest file的分区范围,分区可以被快速定位,可以做manifest list级别裁剪
  • Manifest file 记录了每个data file每一列的最大值和最小值,可以做data file级别的裁剪

3.1.3 Hidden Partition

传统的分区方式:

  • 数据中包含了date列,则按照date分区;如果希望按照hour分区,则需要新增hour列

Iceberg的分区方式:

数据中包含timestamp列,设置好partition transform方式

  • 设置为date时,iceberg自动转换为date分区
  • 设置为hour时,iceberg自动转换为hour分区
  • iceberg记录了这层转化关系,并且按需求进行partition evolution

3.2 Hudi

Hadoop Upsert Delete and Incremental(hudi)

工作重点:

  • Timeline service:Hudi管理transaction的方式
  • Hudi Table Type: Copy on Write/Merge on Read
  • 高效的Upsert:update or insert
  • 索引表:快速定位一条数据的位置
  • Streaming Ingestion Service
  • 完全开源,由Apache孵化

3.2.1 Timeline Service & Upsert & Incremental

Timeline Service: 记录的信息类似于metadata

Upsert: 每一条样本都有一个主键PK,当Upsert一条数据时,如果现有的数据中有这个PK,则update这条数据。否则直接insert这条数据

Incremental: 某个时间点后新增的数据

image.png

3.2.2 Copy on Write

每次新增的数据时,都会先复制一份原来的数据,再加上新增数据,形成新数据,原来的数据同时保留。

缺点:如果原数据有几万列,我们一次更新只更新几列,那么重复写的数量太多了,浪费性能。

image.png

3.2.3 Merge on Read

新增的数据存放在另一块数结构中,每次需要读取数据时,是先Merge合并data file + update file,然后再读。

大幅提升写的时候的性能

image.png

3.3 Detla Lake工作重点

  • ACID Transaction
  • Schema 校验
  • 流批一体
  • Time Travel
  • Upsert/Delete
  • Z-Order优化
  • 该项目没有完全开源

3.3.1 流批一体

由于Detla Lake是由Databrick公司开源,他是Spark的母公司,因此Detla Lake对Spark的支持比较好。

Detla Lake 可以分开存储批数据和流数据。

image.png

image.png

4 总结场景

IceberghudiDetla Lake
ACID TransactionYYY
Partition EvolutionYNN
Schema EvolutionYNN
Time TravelYYY

4.1 技术选型

短期来看,每个项目都有一些自己的优势:

  • 如果强需求Upserts,选hudi
  • 如果希望可扩展性强,选iceberg
  • 如果希望用上Z-order,掏钱买Detla Lake

长期来看,数据湖终将取代Hive,成为HDFS上的表格式标准。

  • 我需要的feature在哪个数据湖上最稳定
  • 哪个数据湖能够用最简单的接入方式(SQL)用上完善的功能
  • 哪个数据湖有计算引擎侧的支持和社区支持
  • 哪个数据湖的版本管理做的最好,最鲁棒

4.2 总结

  1. 数据湖的最新发展状态是湖仓一体
  2. 数据湖以低成本提供ACID Transaction、Schema Evolution、Time travel等高级功能