数据湖三剑客:Delta Lake、Hudi 与 Iceberg 详解 | 青训营笔记

98 阅读2分钟

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

数据湖

  • 数据仓库的主流定义是位于多个数据库上的大容量存储库,它的作用在于存储大量的结构化数据,为管理分析和业务决策提供统一的数据支持,存取过程相对比较繁琐,对于数据类型有一定限制,

  • 数据仓库的主流定义是位于多个数据库上的大容量存储库,它的作用在于存储大量的结构化数据,为管理分析和业务决策提供统一的数据支持,虽然存取过程相对比较繁琐,对于数据类型有一定限制。

  • 湖仓一体是一种结合了数据湖和数据仓库优势的新范式,在用于数据湖的低成本存储上,实现与数据仓库中类似的数据结构和数据管理功能。湖仓一体是一种更开放的新型架构,有人把它做了一个比喻,就类似于在湖边搭建了很多小房子,有的负责数据分析,有的运转机器学习,有的来检索音视频等,至于那些数据源流,都可以从数据湖里轻松获取。

  • 这里需要注意的是,“湖仓一体”并不等同于“数据湖”+“数据仓”

核心数据

ACID

原子性

  • 写入流程
    • 写入parquet数据文件
    • 写入json元数据文件

image.png

  • 确保原子性
    • 用户只会读取已版本号数字命名的json文件
    • 写写一个json文件,对写好的文件使用HDFS的rename

事务隔离

  • Update写入流程
    • 从最新的版本中,获取需要update的分区
    • 乐观锁把该写入的文件全落盘,然后进入写json阶段
      • 发现版本号和一开始没区别,直接开始写新的版本
      • 发现版本号增加了,查看新增的版本分区有没有我更新的分区
        • 有,
        • 没有,

Schema Evolution

  • ID将data和metadata的列名做一一对应
    • 唯一确定的ID,新增赋予新的ID。删列ID不复用
    • 写入数据时,ID写入数据文件

Merge On Read

  • MOR
    • 在读的时候根据版本合并
  • COW
    • 写时复制

Delta Lake 工作重点

  • ACID Transaction
  • Schema校验
  • 流批一体

技术选型

image.png

  • 强需求upserts——Hudi
  • 可扩展性——Iceberg
  • Z-Order优化,Delta Lake