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

114 阅读2分钟

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

今日内容:#数据湖三剑客

学习目标:了解数据湖三剑客:hudi/iceberg/delta lake

学习重点:2、3模块。

1.发展历史

1.1发展阶段-hadoop

image.png 最开始:HDFS 目录区分不同集

优:访问方便灵活、共享

劣:没有schema/不了解包含和分区/多个程序协作难度

“数据沼泽”

1.2Hive

Metastore

数据集集中定义:存了什么,存在哪,schema…

问题:脏读,需要支持schema变更

1.3湖仓一体

数据仓库:schema严格,存储计算不分离

image.png

一体化后:

优势结合,严格管理建立于低成本之上

1.4业界三大数据湖

1)UBER-hudi

2)NETFLIX-iceberg

3)Databricks-delta lake

1.5“数据湖”

数据湖在不断演进 现在的数据湖基本就是指这三巨头。

2.核心技术

2.1文件结构

image.png 按date分区,用metadata记录表信息

2.2time travel

每次写入,用新的元数据文件记录变更

Update时新旧共存

每次产生多个jsonlog,做聚合

Checkpoint记录上次聚合版本号

2.3Trancaction事务

ACID:

Atomicity原子性 要么成功并可见要么不可见

Consistency 一致性 输入和落盘一致

Isolation事务隔离 两件事务独立,无读写/写写冲突

Durability持久性 重启后结果不变

2.3.1原子性

写入:parquet数据-json元数据

用户只会读版本号名的json,hash值命名

不commit用户就读不到

2.3.2事务隔离

image.png 获取需要update的分区/该写的都落盘,准备写json

版本号不变或者分区不更新,直接写新版本/版本号和分区都更新

2.4Schema Evolution

Add/drop/rename

ID把data和metadata列名做一一对应

写入时,id也写

读取时,id做映射 | data中有就drop没有就add,有同一idname不同,rename

 

3.各有所长

3.1icecberg

image.png

Metadata layer

Manifest Files表结构-manifest lists存所有manifast信息

manifast存datafiles信息-datafiles 具体数据

 

Data file filter

一些有助于filter的数据被记录:分区范围等等

 

Hidden Partition

Iceberg含timestamp,设置partition transform方式,可以转化为date/hour分区,按需进行evolution

 

3.2hudi

Hadoop upset dalete & incremental

Timeline service/ table type/ upserts/ 索引表/ streaming ingestion/ 开源

image.png Copy on write

更新时,要把原数据全读出,然后更新,然后写入

image.png Merge on read

读时合并

image.png 存储性能和写入更小开销

3.3Delta lake

image.png 流批一体:

image.png

4.比较

1)技术支持情况

image.png

2)热度

image.png