这是我参与「第四届青训营 」笔记创作活动的第6天。
今日内容:#数据湖三剑客
学习目标:了解数据湖三剑客:hudi/iceberg/delta lake
学习重点:2、3模块。
1.发展历史
1.1发展阶段-hadoop
最开始:HDFS 目录区分不同集
优:访问方便灵活、共享
劣:没有schema/不了解包含和分区/多个程序协作难度
“数据沼泽”
1.2Hive
Metastore
数据集集中定义:存了什么,存在哪,schema…
问题:脏读,需要支持schema变更
1.3湖仓一体
数据仓库:schema严格,存储计算不分离
一体化后:
优势结合,严格管理建立于低成本之上
1.4业界三大数据湖
1)UBER-hudi
2)NETFLIX-iceberg
3)Databricks-delta lake
1.5“数据湖”
数据湖在不断演进 现在的数据湖基本就是指这三巨头。
2.核心技术
2.1文件结构
按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事务隔离
获取需要update的分区/该写的都落盘,准备写json
版本号不变或者分区不更新,直接写新版本/版本号和分区都更新
2.4Schema Evolution
Add/drop/rename
ID把data和metadata列名做一一对应
写入时,id也写
读取时,id做映射 | data中有就drop没有就add,有同一idname不同,rename
3.各有所长
3.1icecberg
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/ 开源
Copy on write
更新时,要把原数据全读出,然后更新,然后写入
Merge on read
读时合并
存储性能和写入更小开销
3.3Delta lake
流批一体:
4.比较
1)技术支持情况
2)热度