当前位置:网站首页>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
边栏推荐
- 【pytorch】yolov5 训练自己的数据集
- C # - realize serialization with Marshall class
- How to do smoke test
- 【翻译】数字内幕。KubeCon + CloudNativeCon在2022年欧洲的选择过程
- 【翻译】供应链安全项目in-toto移至CNCF孵化器
- 面试突击63:MySQL 中如何去重?
- RT-Thread 组件 FinSH 使用时遇到的问题
- Help improve the professional quality of safety talents | the first stage of personal ability certification and assessment has been successfully completed!
- Modulenotfounderror: no module named 'PIL' solution
- 打家劫舍III[后序遍历与回溯+动态规划]
猜你喜欢

Take a look at how cabloyjs workflow engine implements activiti boundary events

全套教学资料,阿里快手拼多多等7家大厂Android面试真题

How to customize animation avatars? These six free online cartoon avatar generators are exciting at a glance!

【计算情与思】扫地僧、打字员、信息恐慌与奥本海默

反射及在运用过程中出现的IllegalAccessException异常

Help improve the professional quality of safety talents | the first stage of personal ability certification and assessment has been successfully completed!

Pychrm Community Edition calls matplotlib pyplot. Solution of imshow() function image not popping up

数学知识——高斯消元(初等行变换解方程组)代码实现

Interface test tool - postman

Mind map + source code + Notes + project, ByteDance + JD +360+ Netease interview question sorting
随机推荐
The dplyr package of R language performs data grouping aggregation statistical transformations and calculates the grouping mean of dataframe data
Elastic search indexes are often deleted [closed] - elastic search indexes gets deleted frequently [closed]
Systematic and detailed explanation of redis operation hash type data (with source code analysis and test results)
How to do smoke test
About image reading and processing, etc
ModuleNotFoundError: No module named ‘PIL‘解决方法
JDBC详解
Low CPU load and high loadavg processing method
Interview assault 63: how to remove duplication in MySQL?
Mysql Information Schema 學習(一)--通用錶
Looting iii[post sequence traversal and backtracking + dynamic planning]
Xingnuochi technology's IPO was terminated: it was planned to raise 350million yuan, with an annual revenue of 367million yuan
安装Mysql报错:Could not create or access the registry key needed for the...
swagger2报错Illegal DefaultValue null for parameter type integer
[translation] linkerd's adoption rate in Europe and North America exceeded istio, with an increase of 118% in 2021.
In depth analysis, Android interview real problem analysis is popular all over the network
C language daily practice - day 22: Zero foundation learning dynamic planning
Tensorflow2.0 自定义训练的方式求解函数系数
学习探索-使用伪元素清除浮动元素造成的高度坍塌
Take a look at how cabloyjs workflow engine implements activiti boundary events