数据湖的选型(delta iceberg hudi)以及比对

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
简介: 数据湖的选型(delta iceberg hudi)以及比对

数据湖的选型


此文章只是作为文稿记录,且截止到2022年11月份


Hudi(0.12.0)支持spark 3.3.x 3.1.x


是 Hadoop Upserts Deletes and Incrementals 的简写

Hudi在华为的实践


1。clustering


支持常见的order以及z-order(里面以后优化https://github.com/delta-io/delta/pull/1149)、Hibert


FileSkipping依赖于 min-max统计信息,BloomFilter,BitMap,二级索引


DataSkipping 可以通过结合数据布局以及FileSKipping做更好的优化


2.MDT(MetaDataTable)


位于Hudi表的.hoodie目录


Column_stats/BloomFilter


高性能的fileList

对超大规模的数据集时,FileList是不可避免的操作,在HDFS上进行该操作还可以接受,一旦涉及到对象存储,大规模的FileList效率及其低下,Hudi引入MDT将文件

信息直接保存下来,避免了大规模的FileList


有自己独立的元数据管理服务?如果有,怎么实现的?


3.支持MOR COW


merge on read/copy on write


快速 upsert(支持SQL)https://hudi.apache.org/docs/quick-start-guide#mergeinto
Hudi/Iceberg/deltalake


4.表有主键的概念


用于定位数据的位置以便于高效的读写操作,


具体index分 Bloom index,simple index,Hbase index, Hash index


5.支持多种存储HDFS,OSS,S3


和OSS的集成 https://hudi.apache.org/docs/oss_hoodie/


和MINio的集成 https://mp.weixin.qq.com/s/jBciMVsdWmRHRjEyyckQlQ


6.支持update upsert(merge)参考 HoodieAnalysis的 updataTable(spark把这个逻辑计划留了出来) 支持CDC CDC怎么实现的?(记录级别还是表级别)


7.datasource 是基于spark DataSource V1


8.支持 flink sql upsert


详见 HoodieTableSink的getSinkRuntimeProvider


9.自己实现了小文件的合并


Iceberg(0.14.1)支持spark 3.3.x 支持 3.1.x


1.catalog


Iceberg有catalog的概念,是对表进行管理(create,drop等)的一个组件

目前有HiveCatalog和HadoopCatalog:


HiveCatalog目前的metadata文件路径存储在MetaStore路径下

不依赖于文件系统rename的原子性


HadoopCatalog目前的metadata文件路径存储在同一个目录下

依赖于文件系统的rename的原子性


JDBCCatalog


通过数据库的lock来提供原子性的保证


2.选择性问题


数据湖Iceberg


社区是出于什么考虑实现两种不兼容的Catalog?


因为两者不兼容,必须选择其一作为系统唯一的Catalog,那是选择HiveCatalog还是HadoopCatalog,为什么?


两种catalog的怎么做迁移?


支持哪些存储?


支持hadoopcatalog 应该就是支持oss,因为oss是套用了hadoop那一套框架? https://help.aliyun.com/document_detail/164694.html


3.特性


支持快照的读写分离回溯,以及不绑定任何计算引擎。


空间查询曲线 Tencent

hibert Dragon Gosper z-order 等数据布局方式


Bit-sliced Encoded Bitmap 用来处理range 查询这种情况[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EVTzqpVY-1681778490020)(null)]


4.已知问题:


目前还不支持CDC https://github.com/apache/iceberg/issues/3941


5.datasource 是基于spark DataSource V2的


6.支持update,支持upsert(merge),具体看类IcebergSparkSqlExtensionsParser.replaceRowLevelCommands


好像是可以,待验证 https://iceberg.apache.org/docs/latest/getting-started/#writing


7.支持 flink sql upsert


详见 flinkSink 的 chainIcebergOperators 方法


DeleteFile有两种方式


1.Position Delete


文件里记录的是哪个文件的第几条记录需要被删除


spark的MOR只支持Position Delete


2.Equality Delete


文件里记录的是过滤条件,可能读了很多文件,但是不一定被删除,即apply的速度比较慢


flink的 CDC 场景记录的就是这种方式


两种实现方式


1.copy on write 类似spark的overwrite


table scan 根据筛选条件选出所有需要更新的文件,在write阶段生成的的文件,旧的文件会被标记为删除


2.merge on read 写的时候生成Delete文件,读的时候将Delete文件应用到DataFile中


读取的时候,读取Position DeleteFile应用到旧的数据文件后,加上新生成的数据文件,最后得到更新之后的结果


8.分区是隐藏的,在查询时不需要添加关于分区的筛选条件,建表的时候指定分区的来源(由哪个字段计算而来)


9.需要额外的服务治理小文件,额外的服务清理过期的snapshot


10.支持多种存储,如 S3,oss,HDFS 等


delta lake(2.1.0) 支持 3.3.x ,delta 1.0.1 支持 3.1.x


  1. 1.Change Data Feed

  2. 2.z-order

  3. 3.幂等写入

  4. 4.列作为元数据变更操作来删除

  5. 5.动态分区覆盖

  6. 6.multi-part checkpoints 的实验性支持

  7. 7.编写大型 scala 性能基准测试的框架

  8. 8.COW/ROM


在写的时候也会进行文件合并 参考

https://blog.csdn.net/monkeyboy_tech/article/details/112234164


在读的时候也会进行合并 参考https://blog.csdn.net/monkeyboy_tech/article/details/112286381


9.支持CDC


CDC怎么实现的?


通过持久化CDC(AddCDCFile)和非持久化CDC(update的记录)


基于action为AddCDCFile的文件做的


10.datasource 是基于spark DataSource V2的

https://docs.databricks.com/delta/delta-change-data-feed.html


11.支持update 支持upsert(merge) 怎么实现的?(支持SQL) 查看DeltaAnalys规则


api级别 https://docs.delta.io/latest/delta-update.html#upsert-into-a-table-using-merge 先删除后写入


12.对flink的支持不太友好 (still in progress)


单独开的项目 https://github.com/delta-io/connectors


三者对比


Delta, Hudi, Iceberg对比


相关文章


1.hudi


https://mp.weixin.qq.com/s/hH7QumzG-0HecAVjqxEQHg


https://mp.weixin.qq.com/s/MRgZtXnYlg-AyJnHA59LXw


https://mp.weixin.qq.com/s/7aUj0IWE9ArFSg4gubVmwg


https://mp.weixin.qq.com/s/YGM2JbzxQiLxpASVtngyoQ


https://mp.weixin.qq.com/s/jBciMVsdWmRHRjEyyckQlQ


https://mp.weixin.qq.com/s/wUSYE_BVp_ezEqx7HNDWmg


2.iceberg


https://mp.weixin.qq.com/s/QBIozrtOF5rVnQjneBFS0g


https://mp.weixin.qq.com/s/GApSqeq797fIlkovjfyLOQ


https://mp.weixin.qq.com/s/tvj3zL3AR8c-uBY2-xVl6A


https://appukvkryx45804.pc.xiaoe-tech.com/detail/i_6325ba3ae4b050af23b8215f/1?

from=p_618dcca0e4b0c005c9902656&fromH5=true&type=6


https://appukvkryx45804.pc.xiaoe-tech.com/detail/i_63282e8de4b0c94264971e70/1?

from=p_618dcca0e4b0c005c9902656&fromH5=true&type=6


3.delta lake


https://mp.weixin.qq.com/s/seLje8yo9oI4Ie9d1qJEuw


https://mp.weixin.qq.com/s/R6YyR-19Vn0XTprIF8injw


https://mp.weixin.qq.com/s/AYClOiI4mbsNPN8TfgF5eQ


https://appukvkryx45804.pc.xiaoe-tech.com/detail/i_63437fc9e4b0eca59c3b9327/1?fromH5=true


4.lakehouse


https://mp.weixin.qq.com/s/R6YyR-19Vn0XTprIF8injw


https://appukvkryx45804.h5.xiaoeknow.com/v2/course/alive/l_632180f4e4b00a4f3740e4d8?type=2&app_id=appukVkRYx45804&available=true&share_user_id=u_607a11801629e_g60oUULXet&share_type=5&scene=%E5%88%86%E4%BA%AB&share_scene=1&entry=2&entry_type=2001&state=772b18c31531e20f27880ac1e0d299ec_GE5d1O


5.直播


https://appukvkryx45804.h5.xiaoeknow.com/v2/course/alive/l_632180f4e4b00a4f3740e4d8?app_id=appukVkRYx45804&available=true&entry=2&entry_type=2001&scene=%E5%88%86%E4%BA%AB&share_scene=1&share_type=5&share_user_id=u_607a11801629e_g60oUULXet&type=2


6.ZOrder


https://docs.google.com/document/d/1TYFxAUvhtYqQ6IHAZXjliVuitA5D1u793PMnzsH_3vs/edit#


7.需要验证的问题


delta cdc的实现(是按照文件级别来做的变更?)


https://docs.delta.io/latest/delta-change-data-feed.html


8.benchmark


https://github.com/delta-io/delta/tree/master/benchmarks


火山引擎分享


Apache Hudi


存在数据孤岛,数据可靠性非强保障, =》需要统一元数据服务


实时入湖成本高,用户理解成本高 =》表操作管理服务


华为终端分享


apache iceberg


做了很多改造

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
相关文章
|
3月前
|
分布式计算 Java Hadoop
数据湖架构之Hudi编译篇
数据湖架构之Hudi编译篇
53 0
|
3月前
|
存储 分布式计算 分布式数据库
字节跳动基于Apache Hudi构建EB级数据湖实践
字节跳动基于Apache Hudi构建EB级数据湖实践
60 2
|
3月前
|
SQL 分布式计算 HIVE
最强指南!数据湖Apache Hudi、Iceberg、Delta环境搭建
最强指南!数据湖Apache Hudi、Iceberg、Delta环境搭建
201 0
|
3月前
|
存储 分布式计算 Hadoop
Apache Hudi:云数据湖解决方案
Apache Hudi:云数据湖解决方案
71 0
|
3月前
|
存储 SQL 分布式计算
使用Apache Hudi构建大规模、事务性数据湖
使用Apache Hudi构建大规模、事务性数据湖
100 0
|
3月前
|
SQL 存储 分布式计算
最佳实践 | 通过Apache Hudi和Alluxio建设高性能数据湖
最佳实践 | 通过Apache Hudi和Alluxio建设高性能数据湖
82 0
|
3月前
|
存储 SQL 分布式计算
Apache Hudi在Linkflow构建实时数据湖的生产实践
Apache Hudi在Linkflow构建实时数据湖的生产实践
66 0
|
3月前
|
SQL 关系型数据库 MySQL
Flink CDC + Hudi + Hive + Presto构建实时数据湖最佳实践
Flink CDC + Hudi + Hive + Presto构建实时数据湖最佳实践
276 0
|
3月前
|
存储 SQL 数据管理
字节跳动基于Apache Hudi构建实时数据湖平台实践
字节跳动基于Apache Hudi构建实时数据湖平台实践
185 0
|
3月前
|
SQL 分布式计算 数据处理
Uber基于Apache Hudi增量 ETL 构建大规模数据湖
Uber基于Apache Hudi增量 ETL 构建大规模数据湖
99 2