性能提升30%!袋鼠云数栈基于 Apache Hudi 的性能优化实战解析

这篇具有很好参考价值的文章主要介绍了性能提升30%!袋鼠云数栈基于 Apache Hudi 的性能优化实战解析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Apache Hudi 是一款开源的数据湖解决方案,它能够帮助企业更好地管理和分析海量数据,支持高效的数据更新和查询。并提供多种数据压缩和存储格式以及索引功能,从而为企业数据仓库实践提供更加灵活和高效的数据处理方式。

在金融领域,企业可以使用 Hudi 来处理大量需要实时查询和更新的金融交易数据。在电商业务中,企业可以使用 Hudi 来跟踪订单数据,以及对订单进行实时更新和查询。在物流和供应链管理中,Hudi 可以帮助企业实时处理和更新大量的物流数据,保证数据的一致性和可靠性。

作为一站式大数据基础软件的袋鼠云数栈,基于 Apache Hudi 为客户提供了存量数据迁移、数据入湖、文件治理等完整支持能力。在这个过程中,积累了一些 Hudi 性能优化的经验,希望通过本文与大家分享交流。

Hudi 原理简析

Apache Hudi 是一个开源的数据湖解决方案,它是基于 Hadoop 和 Spark 的技术栈构建而成,并且拓展到了 Flink、 Trino 等多种计算引擎。Apache Hudi 的主要目的是提供一个高效、可扩展且可靠的数据湖解决方案,用于管理和处理大规模的数据集。

Hudi 的核心实现是通过将数据集合划分为多个数据文件,并为每个数据文件维护一个数据版本和索引信息,来支持增量数据更新和查询操作。如下图所示,当用户需要对数据进行更新时,Hudi 会将更新的数据写入一个新的数据文件中,并通过写时复制(copy-on-write)操作,将原始数据文件中的数据记录复制到新的数据文件中,并在新的数据文件中更新对应的数据记录。

同时,Hudi 会更新数据版本和索引信息,以便用户可以根据数据版本和唯一标识符来访问最新的数据记录。当用户需要查询数据时,Hudi 会使用索引信息来定位数据记录,并返回最新的数据记录。

性能提升30%!袋鼠云数栈基于 Apache Hudi 的性能优化实战解析

在 Hudi 的 merge on read 模式中,更新操作是通过在查询时将原始数据和更新数据进行合并来实现的。具体来说,当有新的数据要被写入时,Hudi 会将新数据追加写入到一个新的日志文件中,并在元数据文件中记录新文件的信息。当查询数据时,Hudi 会将所有数据文件进行合并,生成一个视图,然后对视图进行查询。

由于 Hudi 只需要在查询时将需要更新的数据进行合并,而不需要在写入时进行合并,因此可以避免写入时的性能开销,从而实现快速的更新操作。

Apache Hudi 在写入数据时创建一个新版本,而读取数据时通过将所有版本的数据进行合并来生成一个视图。在视图中,每个数据记录只出现一次,并且是最新的版本,这样可以保证读操作只会涉及到视图中的数据,而不会对原始数据进行修改,从而实现了读写分离。

通过多版本实现并发控制,Hudi 可以在保证数据一致性的前提下,提高读操作的性能,同时也保证了数据的可靠性和可扩展性。

Hudi 优化实践

下面介绍基于袋鼠云数栈的实践经验,所做的 Hudi 性能优化。

支持多索引

Hudi 将数据集合划分为多个数据文件,并为每个数据文件维护一个数据版本和索引信息,来支持增量数据更新和查询操作。通过构建索引就可以利用生成的元数据快速定位查询所需数据的位置,如下图所示。这样可以减少甚至避免从文件系统中扫描或者读取不必要的数据,减少 IO 的开销,大大提升查询效率。Hudi 已经支持几种不同的索引技术,并且还在不断地改进和添加更多的索引实现。

袋鼠云数栈支持用户在创建 Hudi 表时就设置想要使用的索引类型,包括 SIMPLE、BLOOM FILTER、BUCKET 等类型。在写入过程中,Hudi 会将索引信息写入到 parquet 文件或者外部存储中,在读取时应用程序根据这些信息进行比较判断,跳过不必要的数据文件。

性能提升30%!袋鼠云数栈基于 Apache Hudi 的性能优化实战解析

Hudi 在0.11.0版本引入了 MetadataTable 这种多模式索引,利用 MetadataTable 汇总元数据信息,应用程序可以避免文件系统调用文件 Listing 操作(这在对象存储中是非常耗时的),还可以避免直接读取 parquet 文件中的 footer 信息,能够大幅提升查询性能。

袋鼠云数栈支持用户在建表时就开启多模式索引,在写入数据的同时将文件的索引信息也写入 MetadataTable。数栈还支持以异步的方式构建 MetadataTable,保证写入仍然处于低延迟的状态,再由后台的应用程序离线生成 MetadataTable 以提升读取性能。

由于 MetadataTable 依赖 base 文件记录的 column stats/bloomfilter 等信息,因此 merge on read 模式下没有办法将 log 文件的信息保存到 MetadataTable 中,开源框架上没有利用它实现进行文件过滤。

但考虑到 base 文件和 log 文件共用相同的 fileId,袋鼠云技术团队在数栈内部进行了改造:通过 MetadataTable 获取到 base 文件之后,再根据 fileId 进行 log 文件过滤,避免不必要读取。经过验证,这种改动能够使得 merge on read 模式具备和 copy on write 模式相同的过滤效果。

优化文件布局

在大数据存储中,文件布局优化是一种重要的性能优化技术。其主要目的是在数据写入时将数据按照一定的规则布局到存储介质中,以提高数据读取和处理的效率。文件布局优化可以采用多种方式,如时间戳排序、分区排序和合并文件等方式。

Hudi 提供了一种名为 Clustering 的文件布局优化方法,可以借此将小文件合并成较大的文件以减少查询引擎需要扫描的文件总数,或者利用空间填充曲线之类的概念来适应数据湖布局并减少查询读取的数据量。利用 Clustering,可以将具有相同查询特征的数据放到相邻的几个文件内,在查询时再根据索引信息进行过滤,能够有效减少需要读取的文件数量,降低计算成本。

袋鼠云数栈提供了可视化页面以方便用户对文件布局进行调整,用户可以根据需要自由设置排序策略、排序字段、过滤条件等,如下图所示,应用程序会周期性地在后台根据配置对文件进行优化。因为 Hudi 采用多版本组织文件,用户不需要担心优化任务会影响正在运行的读取任务,在优化完成后新的读取任务即可享受到新的布局带来的效率提升。

性能提升30%!袋鼠云数栈基于 Apache Hudi 的性能优化实战解析

探索新特性

在落地 Hudi 的过程中,袋鼠云数栈也在积极跟踪实践社区的新功能新特性。

在 Hudi 0.13.0 中,Hudi 实现了“优化记录负载处理”的特性。通过设置 hoodie.datasource.write.record.merger.impls=org.apache.hudi.HoodieSparkRecordMerger 和 hoodie.logfile.data.block.format=parquet 两个参数避免了额外的复制和反序列化,在写入操作的整个生命周期内以统一的方式处理记录。

袋鼠云数栈测试和引入了这项特性,经过验证,更新性能相比上一版本有了约20%的提升,符合社区的描述。另外,数栈还参考了 Hudi 0.13.0 引入的 disruptor 无锁消息队列写入数据的新特性,通过设置 hoodie.write.executor.type = DISRUPTOR 和 hoodie.write.executor.disruptor.wait.strategy = BUSY_SPIN_WAIT 参数,结合前述的优化配置,更新性能整体提升了30%以上。

总结

Apache Hudi 的优势在于支持增量数据处理,具有良好的数据一致性和可靠性,同时提供多种性能优化技术,能够提高数据处理和查询的效率,具有良好的性能和可扩展性。

袋鼠云数栈团队在落地 Hudi 的过程中,验证了 Hudi 的多种索引,应用了文件组织优化功能,总结了常用的调优参数,为推动企业数据湖建设,提供可靠、高效、可扩展的数据湖解决方案积累了不少经验,能够帮助企业更好地管理和分析数据,提高业务决策的精度和效率。

《数栈产品白皮书》:https://www.dtstack.com/resources/1004?src=szsm

《数据治理行业实践白皮书》下载地址:https://www.dtstack.com/resources/1001?src=szsm

想了解或咨询更多有关袋鼠云大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:https://www.dtstack.com/?src=szbky

同时,欢迎对大数据开源项目有兴趣的同学加入「袋鼠云开源框架钉钉技术qun」,交流最新开源技术信息,qun号码:30537511,项目地址:https://github.com/DTStack文章来源地址https://www.toymoban.com/news/detail-493414.html

到了这里,关于性能提升30%!袋鼠云数栈基于 Apache Hudi 的性能优化实战解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 揭秘|来看看袋鼠云数栈内部的资产血缘方案设计与实现

    数据资产现在需要接入数栈内部相关应用的时候,支持查看血缘的类型从表、离线任务增加到需要表、离线任务、实时任务、API任务、指标、标签等,需要支持数栈现有的所有应用任务,最终实现在数据资产平台查看任务的完整应用链路。 虽然增加不同的任务,现阶段资产实

    2024年02月16日
    浏览(39)
  • 袋鼠云数栈 DataOps 数据生产力实践,实现数据流程的自动化和规范化

    袋鼠云产品团队在帮助企业进行数字化转型实践的过程中,发现很多企业在数据生产链路上都有着相同的问题。包括数据团队聚焦于业务需求短期内的快速交付,内部缺少自顶向下的数据生产管理制度,在数据标准、数据生产流程到研发规范的各个层面均存在不完善与不规范

    2024年02月13日
    浏览(47)
  • 袋鼠云数栈UI5.0设计实战|B端表单这样设计,不仅美观还提效

    我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品。我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值。 本文作者:大喜 相关文章:袋鼠云出品!数栈UI 5.0全新体验升级,设计背后的故事 表单是B端产品中最常见的组件之一,主要⽤于数据

    2024年02月03日
    浏览(40)
  • 提升 Apache Hudi Upsert 性能的三个建议

    Apache Hudi 社区一直在快速发展,各公司正在寻找方法来利用其强大的功能来有效地摄取和管理大规模数据集。 每周社区都会收到一些常见问题,最常见的问题与 Hudi 如何执行更新插入有关,以确保以低延迟访问最新数据。 快速更新插入的主要考虑因素之一是选择正确的存储

    2024年02月05日
    浏览(44)
  • Apache Hudi 在袋鼠云数据湖平台的设计与实践

    在大数据处理中,实时数据分析是一个重要的需求。随着数据量的不断增长,对于实时分析的挑战也在不断加大,传统的批处理方式已经不能满足实时数据处理的需求,需要一种更加高效的技术来解决这个问题。Apache Hudi(Hadoop Upserts Deletes and Incremental Processing)就是这样一种

    2024年02月06日
    浏览(42)
  • 京东购物车如何提升30%性能

    购物车面临的挑战: 1)新业务:随着业务形态的丰富,购物车在不断支持各种新业务,依赖的外部接口也随之增加; 2)下沉:一些前端调用的接口下沉到购物车中台; 3)前置:结算流程很多业务前置到购物车中,如优惠券、京豆; 4)扩容:为改善用户体验购物车可容纳

    2024年02月06日
    浏览(38)
  • MySQL字段的时间类型该如何选择?千万数据下性能提升10%~30%🚀

    在MySQL中时间类型的选择有很多,比如:date、time、year、datetime、timestamp... 在某些情况下还会使用整形int、bigint来存储时间戳 根据节省空间的原则,当只需要存储年份、日期、时间时,可以使用year、date、time 如果需要详细的时间,可以选择datetime、timestamp或者使用整形来存储

    2024年02月08日
    浏览(56)
  • 袋鼠云产品功能更新报告05期|应有尽“优”,数栈一大波功能优化升级!

    这段时间,我们对产品本身以及客户反馈的一些问题进行了持续的更新和优化,包括对离线平台数据同步功能的更新,数据资产平台血缘问题的优化等,力求满足不同行业用户的更多需求,为用户带来极致的产品使用体验。 以下为袋鼠云产品功能更新报告第五期内容,更多探

    2024年02月04日
    浏览(49)
  • 袋鼠云产品功能更新报告06期|数栈产品功能升级,做产品我们是认真的!

    2023年已过半,袋鼠云开发团队和产品团队对数栈产品本身以及客户反馈的问题和痛点进行了持续性的更新和优化,包括对 EasyMR 监控告警功能的更新,以及对离线开发平台表生命周期逻辑的优化等,力求满足不同行业用户的更多需求,为用户带来极致的产品使用体验。 以下为

    2024年02月15日
    浏览(42)
  • Apache Doris 2.0 如何实现导入性能提升 2-8 倍

    数据导入吞吐是 OLAP 系统性能的重要衡量标准之一,高效的数据导入能力能够加速数据实时处理和分析的效率。随着 Apache Doris 用户规模的不断扩大, 越来越多用户对数据导入提出更高的要求,这也为 Apache Doris 的数据导入能力带来了更大的挑战。 为提供快速的数据写入支持

    2024年02月09日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包