当前位置:网站首页>Hudi vs Delta vs Iceberg
Hudi vs Delta vs Iceberg
2022-07-06 11:37:00 【四月天03】
什么是TPC-DS?
TPC-DS是一个数据仓库的基准测试,由Transaction Processing Performance Council(TPC)定义。TPC是一个非营利性组织,由数据库社区在20世纪80年代末成立的,其目标是开发可以客观地用于通过模拟真实世界场景来测试数据库系统性能的基准。TPC已经对数据库行业产生了重大影响。
"帮助决策"(Decision Support)是TPC-DS中的"DS"所代表的含义。TPC-DS共包含99个查询,从简单的聚合到高级模式分析。
1. 我们已经公开分享了我们对 Delta 基准测试框架的修改[8],以支持通过 Spark Datasource 或 Spark SQL 创建 Hudi 表。这可以在基准定义中动态切换。
2. TPC-DS 加载不涉及更新。Hudi 加载的 databeans 配置使用了不适当的写入操作
upsert
,而明确记录[9]了 Hudibulk-insert
[10] 是此用例的推荐写入操作。此外,我们调整了 Hudi parquet 文件大小设置以匹配 Delta Lake 默认值。
CREATE TABLE ...
USING HUDI
OPTIONS (
type = 'cow',
primaryKey = '...',
precombineField = '',
'hoodie.datasource.write.hive_style_partitioning' = 'true',
-- Disable Hudi’s record-level metadata for updates, incremental processing, etc
'hoodie.populate.meta.fields' = 'false',
-- Use “bulk-insert” write-operation instead of default “upsert”
'hoodie.sql.insert.mode' = 'non-strict',
'hoodie.sql.bulk.insert.enable' = 'true',
-- Perform bulk-insert w/o sorting or automatic file-sizing
'hoodie.bulkinsert.sort.mode' = 'NONE',
-- Increasing the file-size to match Delta’s setting
'hoodie.parquet.max.file.size' = '141557760',
'hoodie.parquet.block.size' = '141557760',
'hoodie.parquet.compression.codec' = 'snappy',
– All TPC-DS tables are actually relatively small and don’t require the use of MT table (S3 file-listing is sufficient)
'hoodie.metadata.enable' = 'false',
'hoodie.parquet.writelegacyformat.enabled' = 'false'
)
LOCATION '...'
Hudi 的起源[11]植根于增量数据处理,以将所有老式批处理作业变成增量[12]。因此,Hudi 的默认配置面向增量更新插入和为增量 ETL 管道生成更改流,而将初始负载视为罕见的一次性操作。因此需要更加注意加载时间才能与 Delta 相媲美
4. 运行基准测试
4.1 加载
可以清楚地看到,Delta 和 Hudi 在 0.11.1 版本中的误差在 6% 以内,在当前 Hudi 的 master* 中误差在 5% 以内(我们还对 Hudi 的 master 分支进行了基准测试,因为我们最近在 Parquet 编码配置中发现了一个错误[13] 已及时解决)。为 Hudi 在原始 Parquet 表之上提供的丰富功能集提供支持,例如:
• 增量处理[14](因为在时间戳 t 提交)
• 记录级索引[15](支持记录级查找、更新和删除),
还有更多,Hudi 在内部存储了一组额外的元数据以及每条称为元字段[16]的记录。由于 tpc-ds 主要关注快照查询,在这个特定的实验中,这些字段已被禁用(并且未计算),Hudi 仍然将它们保留为空值,以便在未来打开它们而无需模式演进。添加五个这样的字段作为空值,虽然开销很低,但仍然不可忽略。
4.2 查询
正如我们所见,Hudi 0.11.1 和 Delta 1.2.0 的性能几乎没有区别,而且 Hudi 目前的 master 速度要快一些(~5%)。您可以在 Google Drive 上的此目录中找到原始日志:
• Hudi 0.11:加载[17]/查询[18]
• Hudi master:加载[19]/查询[20]
• Delta 1.2.0:加载[21]/查询[22]
• Delta 2.0.0 rc1:加载[23]/查询[24]
要重现上述结果,请使用我们在 Delta 基准存储库[25] 中的分支并按照自述文件中的步骤进行操作。
5. 结论
总而言之,我们想强调开放性和可重复性在性能基准测试这样敏感和复杂的领域的重要性。正如我们反复看到的那样,获得可靠和值得信赖的基准测试结果是乏味且具有挑战性的,需要奉献、勤奋和严谨的支持。展望未来,我们计划发布更多内部基准测试,突出显示 Hudi 丰富的功能集如何在其他常见行业工作负载中达到无与伦比的性能水平。敬请关注!
环境搭建
在这个基准测试中,我们使用了Delta 1.0和Iceberg 0.13.0,环境配置列于下表。
如前所述,我们使用了Delta Oss的开源TPC-DS基准测试[5],并对其进行了扩展以支持Iceberg。我们记录了Load性能,也就是将数据从Parquet格式加载到Delta/Iceberg表中所需的时间。然后,我们也记录了Query性能。每个TPC-DS查询被运行三次,使用平均运行时间作为结果。
测试结果
1. 整体性能
在完成基准测试后,我们发现无论是Load还是Query,整体性能都是Delta更优,因为它比Iceberg快3.5倍。将数据加载到Delta并执行TPC-DS查询需要1.68小时,而Iceberg则需要5.99小时。
2. Load性能
当从Parquet文件加载数据到两种格式时,Delta在整体性能上比Iceberg快1.3倍。
为了进一步分析Load性能的结果,我们深入研究了每张表的详细加载结果,并注意到当表的大小变大时,加载时间的差异会变大。例如,当加载customer表时,Delta和Iceberg的性能实际上是一样的。另一方面,在加载store_sales表,也就是TPC-DS基准中最大的表之一时,Delta比Iceberg快1.5倍。
这表明,在加载数据时,Delta比Iceberg更快、扩展性更好。
3. Query性能
在执行TPC-DS查询时,Delta的整体性能比Iceberg快4.5倍。在Delta上执行所有查询需要1.14小时,而在Iceberg上执行同样的查询需要5.27小时。
Iceberg和Delta在query34、query41、query46和query68中表现出基本相同的性能。在这些查询中的差异小于1秒。
然而,在其他的TPC-DS查询中,Delta都比Iceberg快,而且差异水平各有不同。
在一些查询中,如query72,Delta比Iceberg快66倍。
而在其他的查询中,Delta和Iceberg之间的差异在1.1倍到24倍之间,都是Delta更快。
总结
在运行该基准测试后,Delta在可扩展性和性能方面都超过了Iceberg,并且幅度有时候意想不到地大。这个基准测试对我们和我们的客户来说提供了一个明确的答案,在构建数据湖仓时应该选择哪种解决方案。
同样需要指出的是,Iceberg和Delta都在不断地改进,随着他们的改进,我们将持续关注他们的性能表现,并在更广泛的社区分享我们的结果。
如果你希望进一步分析并从这个基准测试结果中提炼你的见解,你可以在这里下载完整的基准测试报告[6]。
原文地址:
https://databeans-blogs.medium.com/delta-vs-iceberg-performance-as-a-decisive-criteria-add7bcdde03d
边栏推荐
- spark基础-scala
- 如何自定义动漫头像?这6个免费精品在线卡通头像生成器,看一眼就怦然心动!
- Problems encountered in using RT thread component fish
- Carte de réflexion + code source + notes + projet, saut d'octets + jd + 360 + tri des questions d'entrevue Netease
- Actf 2022 came to a successful conclusion, and 0ops team won the second consecutive championship!!
- R language uses DT function to generate t-distribution density function data and plot function to visualize t-distribution density function data
- 三面蚂蚁金服成功拿到offer,Android开发社招面试经验
- The slave i/o thread stops because master and slave have equal MySQL serv
- Low CPU load and high loadavg processing method
- 史上超级详细,想找工作的你还不看这份资料就晚了
猜你喜欢
Characteristic colleges and universities, jointly build Netease Industrial College
Graffiti intelligence is listed on the dual main board in Hong Kong: market value of 11.2 billion Hong Kong, with an annual revenue of 300 million US dollars
[translation] linkerd's adoption rate in Europe and North America exceeded istio, with an increase of 118% in 2021.
Actf 2022 came to a successful conclusion, and 0ops team won the second consecutive championship!!
快速幂模板求逆元,逆元的作用以及例题【第20届上海大学程序设计联赛夏季赛】排列计数
A full set of teaching materials, real questions of Android interview of 7 major manufacturers including Alibaba Kwai pinduoduo
业务与应用同步发展:应用现代化的策略建议
Carte de réflexion + code source + notes + projet, saut d'octets + jd + 360 + tri des questions d'entrevue Netease
CCNP Part 11 BGP (III) (essence)
今日直播 | “人玑协同 未来已来”2022弘玑生态伙伴大会蓄势待发
随机推荐
安装Mysql报错:Could not create or access the registry key needed for the...
Use of deg2rad and rad2deg functions in MATLAB
Zero foundation entry polardb-x: build a highly available system and link the big data screen
三面蚂蚁金服成功拿到offer,Android开发社招面试经验
包装行业商业供应链管理平台解决方案:布局智慧供应体系,数字化整合包装行业供应链
[translation] micro survey of cloud native observation ability. Prometheus leads the trend, but there are still obstacles to understanding the health of the system
Test technology stack arrangement -- self cultivation of test development engineers
GCC [7] - compilation checks the declaration of functions, and link checks the definition bugs of functions
【翻译】Linkerd在欧洲和北美的采用率超过了Istio,2021年增长118%。
Reflection and illegalaccessexception exception during application
DaGAN论文解读
Take a look at how cabloyjs workflow engine implements activiti boundary events
【翻译】数字内幕。KubeCon + CloudNativeCon在2022年欧洲的选择过程
五金机电行业智能供应链管理系统解决方案:数智化供应链为传统产业“造新血”
MATLAB中deg2rad和rad2deg函数的使用
CCNP Part 11 BGP (III) (essence)
How can my Haskell program or library find its version number- How can my Haskell program or library find its version number?
Excel 中VBA脚本的简单应用
主从搭建报错:The slave I/O thread stops because master and slave have equal MySQL serv
黑馬--Redis篇