Apache Hudi vs Delta Lake:透明TPC-DS Lakehouse性能基准

简介: Apache Hudi vs Delta Lake:透明TPC-DS Lakehouse性能基准

1. 介绍

最近几周,人们对比较 Hudi、Delta 和 Iceberg 的表现越来越感兴趣[1]。我们认为社区应该得到更透明和可重复的分析。我们想就如何执行和呈现这些基准、它们带来什么价值以及我们应该如何解释它们添加我们的观点。

2. 现有方法存在哪些问题?

最近 Databeans 发布了一篇博客[2],其中使用 TPC-DS 基准对 Hudi/Delta/Iceberg 的性能进行了正面比较。虽然很高兴看到社区挺身而出并采取行动提高对行业当前技术水平的认识,但我们发现了一些与实验进行方式和结果报告有关的问题,我们希望分享和今天更广泛地讨论。作为一个社区,我们应该努力在发布基准时增加更严格的标准。我们相信这些是任何基准测试工作的关键原则:

可重现性:如果结果不可重现,读者别无选择,只能盲目相信表面上的结果。相反,应该记录基准,以便任何人都可以使用相同的工具获得相同的结果。

开放:为了获得相同的结果,确保用于基准测试的工具可用于检查正确性至关重要。

公平:随着正在测试的技术的复杂性不断增长,基准设置需要确保所有竞争者都使用记录在案的配置来测试工作负载。

关于这些基本问题,不幸的是,我们认为 Databeans 博客没有完整地分享结果是什么以及如何实现的。例如:

• 基准 EMR 运行时配置未完全披露:尚不清楚,例如Spark 的动态分配功能[3]是否被禁用,因为它有可能对测量产生不可预测的影响。

• 用于基准测试的代码是 Delta 基准测试框架[4]的扩展,不幸的是它也没有公开共享,因此无法查看或重复相同的实验。

• 无法访问代码也会影响分析应用于 Hudi/Delta/Iceberg 的配置的能力,这使得评估公平性具有挑战性

3. 我们建议如何运行基准测试

我们会定期运行性能基准测试,以确保一起提供Hudi 丰富的功能集与基于 Hudi 的 EB 数据湖的最佳性能。我们的团队在对复杂分布式系统(如 Apache Kafka 或 Pulsar)进行基准测试方面拥有丰富的经验[5],符合上述原则。为确保已发布的基准符合以下原则:

1. 我们关闭了 Spark 的动态分配功能[6],以确保我们在稳定的环境中运行基准测试,并消除 Spark 集群决定扩大或缩小规模时结果中的任何抖动。我们使用 EMR 6.6.0 版本,Spark 3.2.0 和 Hive 3.1.2(用于 HMS),具有以下配置(在创建时在 Spark EMR UI 中指定)有关如何设置 HMS 的更多详细信息,请按照说明进行操作 在README文件中[7]

[{
  "Classification": "spark-defaults",
  "Properties": {
    "spark.dynamicAllocation.enabled": "false"
  }
}, {
  "Classification": "spark",
  "Properties": {
    "maximizeResourceAllocation": "true"
  }
}, {
  "Classification": "hive-site",
  "Properties": {
    "javax.jdo.option.ConnectionURL": < hive_metastore_url > ,
    "javax.jdo.option.ConnectionDriverName": "org.mariadb.jdbc.Driver",
    "javax.jdo.option.ConnectionUserName": < username > ,
    "javax.jdo.option.ConnectionPassword": < password >
  }
}]

1. 我们已经公开分享了我们对 Delta 基准测试框架的修改[8],以支持通过 Spark Datasource 或 Spark SQL 创建 Hudi 表。这可以在基准定义中动态切换。

2. TPC-DS 加载不涉及更新。Hudi 加载的 databeans 配置使用了不适当的写入操作 upsert,而明确记录[9]了 Hudi bulk-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 丰富的功能集如何在其他常见行业工作负载中达到无与伦比的性能水平。敬请关注!

目录
相关文章
|
4天前
|
存储 JSON Apache
科大讯飞:成本降低 60%,性能提升 10 倍,从 ES Loki 到 Apache Doris 可观测性存储底座升级
科大讯飞星际日志中心经历了从 Elasticsearch 到 Loki,再到 Apache Doris 的可观测性存储分析底座升级,支持可观测三大支柱 Log Trace Metrics 的存储与分析,有效解决 Elasticsearch 成本高、Loki 查询慢的问题。Doris 能够在降低成本的同时提高查询效率,实现了查询性能提升 10 倍、存储空间缩减至 Elasticsearch 1/6。此外,Doris 提供的半结构化数据类型 VARIANT 能高效存储可扩展的 JSON 数据,具备很高的灵活性,且其性能媲美普通宽表。
科大讯飞:成本降低 60%,性能提升 10 倍,从 ES Loki 到 Apache Doris 可观测性存储底座升级
|
1月前
|
存储 JSON 物联网
查询性能提升 10 倍、存储空间节省 65%,Apache Doris 半结构化数据分析方案及典型场景
本文我们将聚焦企业最普遍使用的 JSON 数据,分别介绍业界传统方案以及 Apache Doris 半结构化数据存储分析的三种方案,并通过图表直观展示这些方案的优势与不足。同时,结合具体应用场景,分享不同需求场景下的使用方式,帮助用户快速选择最合适的 JSON 数据存储及分析方案。
查询性能提升 10 倍、存储空间节省 65%,Apache Doris 半结构化数据分析方案及典型场景
|
1月前
|
SQL 消息中间件 Java
兼容Trino Connector,扩展Apache Doris数据源接入能力|Lakehouse 使用手册(四)
通过兼容 Connector 插件,Apache Doris 能够支持 Trino/Presto 可对接的所有数据源,而无需改动 Doris 的内核代码。
兼容Trino Connector,扩展Apache Doris数据源接入能力|Lakehouse 使用手册(四)
|
1月前
|
存储 大数据 数据挖掘
【数据新纪元】Apache Doris:重塑实时分析性能,解锁大数据处理新速度,引爆数据价值潜能!
【9月更文挑战第5天】Apache Doris以其卓越的性能、灵活的架构和高效的数据处理能力,正在重塑实时分析的性能极限,解锁大数据处理的新速度,引爆数据价值的无限潜能。在未来的发展中,我们有理由相信Apache Doris将继续引领数据处理的潮流,为企业提供更快速、更准确、更智能的数据洞察和决策支持。让我们携手并进,共同探索数据新纪元的无限可能!
114 11
|
2月前
|
存储 数据挖掘 Apache
Apache Doris + Iceberg 快速搭建指南|Lakehouse 使用手册(三)
如何在 Docker 环境下快速搭建 Apache Doris + Apache Iceberg 测试 & 演示环境,并展示各功能的使用操作
Apache Doris + Iceberg 快速搭建指南|Lakehouse 使用手册(三)
|
2月前
|
消息中间件 大数据 Kafka
"Apache Flink:重塑大数据实时处理新纪元,卓越性能与灵活性的实时数据流处理王者"
【8月更文挑战第10天】Apache Flink以卓越性能和高度灵活性在大数据实时处理领域崭露头角。它打破批处理与流处理的传统界限,采用统一模型处理有界和无界数据流,提升了开发效率和系统灵活性。Flink支持毫秒级低延迟处理,通过时间窗口、状态管理和自动并行化等关键技术确保高性能与可靠性。示例代码展示了如何使用Flink从Kafka读取实时数据并进行处理,简明扼要地呈现了Flink的强大能力。随着技术进步,Flink将在更多场景中提供高效可靠的解决方案,持续引领大数据实时处理的发展趋势。
96 7
|
2月前
|
存储 数据挖掘 数据处理
【破晓数据湖新时代!】巴别时代揭秘:Apache Paimon 打造 Streaming Lakehouse 的神奇之旅!
【8月更文挑战第9天】随着数据湖技术的发展,企业积极探索优化数据处理的新途径。Apache Paimon 作为一款高性能数据湖框架,支持流式与批处理,适用于实时数据分析。本文分享巴别时代使用 Paimon 构建 Streaming Lakehouse 的实践经验。Paimon 统一了数据存储与查询方式,对构建实时数据管道极具价值。
203 3
|
3月前
|
SQL Apache 流计算
Apache Doris + Paimon 快速搭建指南|Lakehouse 使用手册(二)
为大家介绍 Lakehouse 使用手册(二)之 Apache Doris + Apache Paimon 搭建指南。
|
2月前
|
应用服务中间件 Apache PHP
Apache vs Nginx: 实际考虑因素
Apache vs Nginx: 实际考虑因素
84 0
|
3月前
|
SQL 分布式计算 Apache
Apache Doris + Apache Hudi 快速搭建指南|Lakehouse 使用手册(一)
本文将在 Docker 环境下,为读者介绍如何快速搭建 Apache Doris + Apache Hudi 的测试及演示环境,并对各功能操作进行演示,帮助读者快速入门。
Apache Doris + Apache Hudi 快速搭建指南|Lakehouse 使用手册(一)

推荐镜像

更多