数据湖Iceberg、Hudi和Paimon比较

1.社区发展现状

项目Apache IcebergApache HudiApache Paimon
开源时间2018/11/62019/1/172023/3/12
LicenseApache-2.0Apache-2.0Apache-2.0
Github Watch1481.2k70
Github Star5.3k4.9k

1.7k

Github Fork1.9k2.3k702
Github issue(Open)898481263
Github issue(closed)20542410488
Github Open PR(Open)56544982
Github Open PR(Closed)624073782049
Committers454436131
Releases17163
Release LatestApache Iceberg 1.4.30.14.1 ReleaseRelease 0.6

(以上数据为2024年2月21日)

可见Apache iceberg和Apache hudi不相伯仲,Apache Paimon成立时间较晚。

Uber的工程师分享了大量Hudi的技术细节和内部方案落地,研究官网的近10个PPT已经能较为轻松理解内部细节,此外国内的小伙伴们也在积极地推进社区建设,提供了官方的技术公众号和邮件列表周报。

Iceberg 相对会平静一些,社区的大部分讨论都在 Github 的 issues 和 pull request 上,邮件列表的讨论会少一点,不少有价值的技术文档要仔细跟踪 issues 和 PR 才能看到,这也许跟社区核心开发者的风格有关。

Paimon 项目的committers可以看出主要由国人发起和主导,具备更好的本地化支持。

2.功能比较

对比项Apache IcebergApache HudiApache Paimon
update/deleteYESYESYES
文件合并ManuallyAutomaticAutomatic
历史数据清理ManuallyAutomaticAutomatic
文件格式parquet,avro,orcparquet,avroparquet,avro,orc
计算引擎

Hive/Spark/Presto/Flink/Impala

/Trino等

Hive/Spark/Presto/Flink/Impala

/Trino等

Hive/Spark/Presto/Flink

/Trino

存储引擎HDFS/S3HDFS/S3/OBS/ALLUXIO/AzureHDFS/S3/OSS
SQL DMLYESYESYES
ACID transactionYESYESYES
索引NOYESYES
可扩展的元数据存储YESYESYES

3.ACID和隔离级别支持

对比项Apache IcebergApache HudiApache Paimon
ACID SupportYESYESYES
Isolation LevelWrite SerializationSnapshot IsolationSnapshot Isolation
Concurrent Multi-WritersYESYESYES
Time travelYESYESYES

对于数据湖来说,三种隔离分别代表。

Serialization:所有的 reader 和 writer 都必须串行执行;
Write Serialization: 多个 writer 必须严格串行,reader 和 writer 之间则可以同时跑;
Snapshot Isolation: 如果多个 writer 写的数据无交集,则可以并发执行;否则只能串行。Reader 和 writer 可以同时跑。
综合起来看,Snapshot Isolation 隔离级别的并发性是相对比较好的。

4.Schema变更支持

对比项Apache IcebergApache HudiApache Paimon
Schema EvolutionALLback-compatibleback-compatible
Self-defined schema objectYESNO(spark-schema)NO(我理解,不准确)

Schema Evolution:指schema变更的支持情况,我的理解是hudi仅支持添加可选列和删除列这种向后兼容的DDL操作,而其他方案则没有这个限制。

Paimon支持有限的schema变更。目前,框架无法删除列,因此 DROP 的行为将被忽略,RENAME 将添加新列,列类型只支持从短到长或范围更广的类型。

Self-defined schema objec:指数据湖是否自定义schema接口,以期跟计算引擎的schema解耦。这里iceberg是做的比较好的,抽象了自己的schema,不绑定任何计算引擎层面的schema。

在Hudi 0.11.0版本中,针对Spark 3.1、Spark 3.2版本增加了schema功能的演进。如果启用 set hoodie.schema.on.read.enable=true以后,我们可以对表列和对表进行一系列的操作。列的变更(增加、删除、重命名、修改位置、修改属性),表的变更(重命名、修改属性) 等。

5.其它功能

对比项Apache IcebergApache HudiApache Paimon
One line demoNot GoodMediumGood
Python SupportYESNONO(不确定)
File EncryptionYESNONO
Cli CommandNOYESYES

One line demo:指的是,示例demo是否足够简单,体现了方案的易用性,Iceberg稍微复杂一点(我认为主要是Iceberg自己抽象出了schema,所以操作前需要定义好表的schema)。做得最好的其实是delta,因为它深度跟随spark易用性的脚步。

Python Support:Python支持,很多基于数据湖之上做机器学习的开发者会考虑的问题,Iceberg比较做的好。

 File Encryption:出于数据安全的考虑,Iceberg还提供了文件级别的加密解密功能,这是其他方案未曾考虑到的一个比较重要的点。

Cli Command:命令行

6.商业公司支持

Apache Iceberg

Iceberg 在国内的厂商非常多,腾讯一马当先,是贡献者数量最多的团队,国内的字节 、网易也紧随其后,相比腾讯 Iceberg 和 Hudi 通吃的战略,阿里在 Iceberg 的投入就少了非常多,国外的贡献者也非常多,包括 Netflix、Apple 等等

Apache Hudi

Hudi 在国内的应用很广,包括国内的大厂阿里巴巴、腾讯、字节跳动和华为,国外的话主要是 Uber 和 Amazon。

Apache Paimon

2023 年 3 月 12 日,Flink Table Store 项目顺利通过投票,正式进入 Apache 软件基金会 (ASF) 的孵化器,改名为 Apache Paimon (incubating)。进入孵化器后,Paimon 得到了众多的关注,包括 阿里云、字节跳动、Bilibili、汽车之家、蚂蚁 等多家公司参与到 Apache Paimon 的贡献,也得到了广大用户的使用。

7.性能比较

7.1 Iceberg和Hudi比较

Brooklyn Data在 2022 年 11 月发布 Delta 与 Iceberg 的基准测试结果:Setting the Table: Benchmarking Open Table Formats

Onehouse 添加了 Apache Hudi,并在Brooklyn Github 代码库中发布了代码:https://github.com/brooklyn-data/delta/pull/2

测试结果见上图所示,Delta 和 Hudi 不相上下,Iceberg 落后并且还有一定的差距。

注意:在运行 TPC-DS 基准比较 Hudi、Delta 和 Iceberg 时,需要记住的一个关键点是,默认情况下 Delta + Iceberg 是针对仅追加的工作负载进行优化的,而 Hudi 默认情况下是针对可变工作负载进行优化的。默认情况下,Hudi 使用 "upsert "写模式,与插入相比,这种写模式自然会产生写开销。benchmarks 这个东西还是要以实际的业务场景测试为好,benchmarks 只能作为参考。

7.2 Hudi和Paimin比较

(1) Flink中文社区对Hudi和Paimon进行了性能比较,详细过程见:构建 Streaming Lakehouse:使用 Paimon 和 Hudi 的性能对比

直接说结论:

在 upsert 场景,关闭 compaction 时,Paimon 读写性能均优于 Hudi,且 Hudi 对 TM 的内存要求更高。

在 upsert 场景,开启 compaction 时,Paimon 读写性能均优于 Hudi。对比前面的关闭 compaction 测试,Paimon 和 Hudi 的写性能均有所下降,但读性能得到提升。

在 append 场景,Paimon 读写性能优于 Hudi,且二者都对 TM 内存要求均不高。

(2) 同程也对Hudi和Paimon进行了性能测试,详细内容见:Apache Paimon 在同程旅行的实践进展

同程在实践过程中,发现在全量+增量写入的场景中,相对 Hudi,Paimon 在相同计算资源的情况下,摄入的速度要优于 Hudi MOR 的摄入,大概有 3 倍左右的差距。查询场景下会更明显,在同样数据量的情况下,Paimon 的查询速度要优于 Hudi,大概有 7 倍左右的差距。

(3) 同时,一些开发人员对Flink 官方测试结果产生疑问,自己对也Hudi和Paimon进行了性能测试,具体过程见:Paimon VS Hudi 写入效率大PK

发现Paimon 的写入效率跟写入效果(文件数量),写入速度是 Hudi 的2倍多,而文件数量只有 Hudi数量的一半不到。对比Flink官方测试出来的,比 Hudi COW 表写入效率快12倍的结论,没有完全没有体现出来(测试的数据量不同)

实验测试结论为:Hudi 的MOR 表无论是写入速度,还是生成的文件数量,都要比 Paimon 优秀。而Hudi 的 COW 表,则正好相反,其无论写入速度,还是文件生成数量,则要比 Paimon 差,但这个差距,貌似在随着 checkpoint 时间的增大,逐渐在缩小。

8.总结

Apache Iceberg

Iceberg 社区基本盘还是在离线处理,它在国外的应用场景主要是离线取代 Hive,它也有强力的竞争对手 Delta,很难调整架构去适配 CDC 流更新。同时,Iceberg 扩展性强,对其它计算引擎也暴露的比较多的优化空间,但是这也导致后续的发展难以迅速,涉及到众多已经对接好的引擎。这并没有什么错,后面也证明了 Iceberg 主打离线数据湖和扩展性是有很大的优势,得到了众多国外厂商的支持。

Apache Hudi

Hudi 默认使用 Flink State 来保存 Key 到 FileGroup 的 Index,好处是全自动,想 Scale Up 只用调整并发就行了,坏处是性能差,直接让湖存储变成了实时点查,超过5亿条数据性能更是急剧下降。同时,存储成本也高,RocksDB State 保存所有索引。数据非常容易不一致,甚至再也不能有别的引擎来读写,因为一旦读写就破坏了 State 里面的 Index。

针对 Flink State Index 诸多问题,字节跳动的工程师们在 Hudi 社区提出了 Bucket Index 的方案,该解决方案好处是去除了 Index 带来了诸多性能问题。坏处是需要手动选取非常合适的 Bucket Number,多了小文件操作很多,少了性能不行。这套方案也是目前 Hudi 体量较大的用户的主流方案。

Hudi 当前存在的问题:

  • Hudi 众多的模式让用户难以选择。
  • 使用 Flink State 还是 Bucket Index?一个易用性好但是性能不行,一个难以使用。
  • 使用 CopyOnWrite 还是 Merge On Read?一个写入吞吐很差,一个查询性能很差。
  • 更新效率低,1-3 分钟 Checkpoint 容易反压,默认 5 次 Checkpoint 合并,一般业务可接受的查询是查询合并后的数据;全增量一体割裂,难以统一。
  • 系统设计复杂,Bugs 难以收敛,工单层出不穷;各引擎之间的兼容性也非常差;参数众多。

Hudi 天然面向 Spark 批处理模式设计而诞生,不断在面向批处理的架构上进行细节改造,无法彻底适配流处理更新场景,在批处理架构上不断强行完善流处理更新能力,导致架构越来越复杂,可维护性越来越差。

Apache Paimon

Apache Paimon 最典型的场景是解决了 CDC (Change Data Capture) 数据的入湖。但是因为发展较晚,当前国内并没有主流的商业平台落地,对于批处理的性能也有待考量,仍需要一定的时间去完善和发展。以下为当前各版本支持情况:

最后,对于官方的性能测试结果,仅参考即可。实际业务场景中需要结果自身业务去测试验证,综合考虑场景、数据量、各组件版本等多个因素,根据业务需求选择适合自己的解决方案。

任何关于性能测试的结论,都必须建立在具体的场景之下才有意义!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2804067.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Stable Diffusion 模型分享:Realisian(现实、亚洲人)

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八 下载地址 模型介绍 Realisian 是由多个模型合并而来,是一个现实模型,可以绘制美丽的亚…

贡献过Github开源项目的可领$231,亲测有效!

就在刚才我已经领到了价值231美元的Strk并且变现啦​! 这次领取有一个条件就是,需要是Github排名前5k的开源项目的Contributor,并提交最少3次&其中,至少有一次PR贡献是在 2018 年或之后完成的。 丙子我恰巧所有开源项目都在世…

【C++】笔试训练(九)

目录 一、选择题二、编程题1、另类加法2、走方格的方案数 一、选择题 1、某函数申明如下 void Func(int& nVal1);有int a,下面使用正确的为() A Func(a) B Func(&a) C Func(*a) D Func(&(*a)) 答案:A 2、C语言中,类…

信号系统之傅里叶变换属性

1 傅里叶变换的线性度 傅里叶变换是线性的,即具有均匀性和可加性的性质。对于傅里叶变换家族的所有四个成员(傅里叶变换、傅里叶级数、DFT 和 DTFT)都是如此。 图 10-1 提供了一个示例,说明均匀性如何成为傅里叶变换的一个属性。…

Stable Diffusion 3震撼发布模型与Sora同架构

Prompt:Epic anime artwork of a wizard atop a mountain at night casting a cosmic spell into the dark sky that says "Stable Diffusion 3" made out of colorful energy Stability AI发布Stable Diffusion 3文本到图像模型。该模型采用扩散变换架构…

Java项目:27 基于SSM+JSP实现的大学校园兼职平台

作者主页:舒克日记 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 系统介绍 基于SSMJSP实现的大学校园兼职平台分为前台与管理员两块 管理端分为8大模块,分别是用户管理、兼职管理、帖子管理、聊天管理、…

研学活动报名平台系统功能清单

中小学生社会实践活动、研学旅行等素质教育活动报名与管理平台,功能包含:活动分类,活动管理,在线报名缴费,扫码核销,会员特权体系,在线商城,研学互动。系统支持入驻老师自行创建研学…

【Java程序员面试专栏 数据结构】一 高频面试算法题:数组

一轮的算法训练完成后,对相关的题目有了一个初步理解了,接下来进行专题训练,以下这些题目就是汇总的高频题目,本篇主要聊聊数组,包括数组合并,滑动窗口解决最长无重复子数组问题,图形法解下一个排列问题,以及一些常见的二维矩阵问题,所以放到一篇Blog中集中练习 题目…

如何在nginx增加健康检查接口

在docker中部署的nginx或者在nginx部署的nginx一般是需要一个健康检查接口的 这样的话,就可以确定容器当前的状态是否是健康的 那么,如何给nginx增加一个健康检查的接口呢? 接下来呢,我们就演示一个在nginx中如何增加健康检查的…

无人机竞赛常用目标检测方法--色块检测

本次开源计划主要针对大学生无人机相关竞赛的视觉算法开发。 开源代码仓库链接:https://github.com/zzhmx/Using-color-gamut-limitations-such-as-HSV-and-RGB-for-object-detection.git 主要使用传统算法,如果想要使用进阶版机器学习算法,请…

03 表数据基本操作

文章目录 插入(insert)查询(select)where子句更新表记录(update)删除表记录(delete)表字段的操作(alter)时间类型数据 插入(insert) insert into 表名 values(值1,值2...),(值1,值2...),...; insert into 表名 (字段1,...) value…

使用phpstudy搭建eXtplorer网站并结合内网穿透远程访问本地资源

文章目录 1. 前言2. eXtplorer网站搭建2.1 eXtplorer下载和安装2.2 eXtplorer网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1. 前言 通过互联网传输文件,是互联网最重要的应用之一,无论是…

定制红酒:如何开启定制红酒之旅,享受个性化服务

在追求品质生活的今天,人们越来越注重个性化的服务和产品。云仓酒庄洒派定制红酒,就是为满足消费者的这一需求而生。它提供了一个平台,让消费者可以根据自己的喜好和需求,定制专属的红酒,享受个性化的服务。那么&#…

【python】网络爬虫与信息提取--scrapy爬虫框架介绍

一、scrapy爬虫框架介绍 scrapy是一个功能强大的网络爬虫框架,是python非常优秀的第三方库,也是基于python实现网络爬虫的重要技术路线。scrapy不是哟个函数功能库,而是一个爬虫框架。 爬虫框架:是实现爬虫功能的一个软件结构和功…

VegaPrime 2013 VP2013

Vega Prime 2013 VegaPrime 2013 VP2013

ChatGPT回答模式

你发现了吗,ChatGPT的回答总是遵循这些类型方式。 目录 1.解释模式 2.类比模式 3.列举模式 4.限制模式 5.转换模式 6.增改模式 7.对比模式 8.翻译模式 9.模拟模式 10.推理模式 1.解释模式 ChatGPT 在回答问题或提供信息时,不仅仅给出…

文件上传漏洞--Upload-labs--Pass20--数组绕过

一、漏洞原理 漏洞来源:count()函数漏洞。 现自定义一个数组 arr[],定义arr[0]1,arr[3]2, 此时count(arr)的值为2,则arr[count[arr]]即为arr[2],但是arr[2]未定义,即为一个空值,若使用count()函数的本意是…

谷粒商城-nginx搭建域名访问环境性能压测

nginx搭建域名访问环境 正向代理与反向代理 正向代理:客户端向代理服务器发请求并指定目标服务器,代理向目标服务器转交请求并将获得的内容返回给客户端。 反向代理:用户直接访问反向代理服务器就可以获得目标服务器的资源。反向代理服务器…

主流的开发语言和开发环境介绍

个人浅见,不喜勿喷,谢谢 软件开发是一个涉及多个方面的复杂过程,其中包括选择合适的编程语言和开发环境。编程语言是软件开发的核心,它定义了程序员用来编写指令的语法和规则。而开发环境则提供了编写、测试和调试代码的工具和平台…

天锐绿盾 | 文件数据\资料防泄漏软件 \ 自动智能透明加密保护

怎么防止公司办公终端文件数据资料外泄? 防止公司办公终端文件数据资料外泄是非常重要的,以下是一些有效的措施: 限制访问权限:根据员工的职责和需求,设定文件和数据资料的访问权限。确保只有授权人员才能访问敏感信息。 加密存…