摘要:本文主要介绍 Presto 如何更好的利用 Hudi 的数据布局、索引信息来加速点查性能 。本文分享自华为云社区《华为云基于 Apache Hudi 极致查询优化的探索实践!》,作者:FI_mengtao 。
背景湖仓一体(LakeHouse)是一种新的开放式架构,它结合了数据湖和数据仓库的最佳元素,是当下大数据领域的重要发展方向 。
华为云早在2020年就开始着手相关技术的预研,并落地在华为云 FusionInsight MRS智能数据湖解决方案中 。
目前主流的三大数据湖组件 Apache Hudi、Iceberg、Delta各有优点,业界也在不断探索选择适合自己的方案 。
华为湖仓一体架构核心基座是 Apache Hudi,所有入湖数据都通过 Apache Hudi 承载,对外通过 HetuEngine(Presto增强版)引擎承担一站式SQL分析角色,因此如何更好的结合 Presto 和 Hudi 使其查询效率接近专业的分布式数仓意义重大 。查询性能优化是个很大的课题,包括索引、数据布局、预聚合、统计信息、引擎 Runtime优化等等 。本文主要介绍 Presto 如何更好的利用 Hudi 的数据布局、索引信息来加速点查性能 。预聚合和统计信息我们将在后续分享 。
数据布局优化大数据分析的点查场景一般都会带有过滤条件,对于这种类型查询,如果目标结果集很小,理论上我们可以通过一定手段在读取表数据时大量跳过不相干数据,只读取很小的数据集,进而显著的提升查询效率 。我们可以把上述技术称之为 DataSkipping 。
好的数据布局可以使相关数据更加紧凑(当然小文件问题也一并处理掉了)是实现 DataSkipping的关键一步 。日常工作中合理设置分区字段、数据排序都属于数据布局优化 。当前主流的查询引擎 Presto/Spark 都可以对Parquet文件做 Rowgroup 级别过滤,最新版本甚至支持 Page 级别的过滤;选取合适的数据布局方式可以使引擎在读取上述文件可以利用列的统计信息轻易过滤掉大量 Rowgroup/Page,进而减少IO 。
那么是不是 DataSkipping仅仅依赖数据布局就好了?其实不然 。上述过滤还是要打开表里每一个文件才能完成过滤,因此过滤效果有限,数据布局优化配合 FileSkipping才能更好的发挥效果 。
当我们完成数据布局后,对每个文件的相关列收集统计信息,下图给个简单的示例,数据经过排序后写入表中生成三个文件,指定点查 where a < 10 下图可以清楚的看出 a < 10的结果集只存在于 parquet1文件中,parquet2/parquet3 中 a 的最小值都比10大,显然不可能存在结果集,所以直接裁剪掉 parquet2和 parquet3即可 。
文章插图
这就是一个简单 FileSkipping,FileSkipping的目的在于尽最大可能裁剪掉不需要的文件,减少扫描IO,实现 FileSkipping有很多种方式,例如
min-max统计信息过滤、BloomFilter、Bitmap、二级索引等等,每种方式都各有优缺点,其中 min-max 统计信息过滤最为常见,也是 Hudi/Iceberg/DeltaLake 默认提供的实现方式 。
Apache Hudi核心能力ClusteringHudi早在 0.7.0 版本就已经提供了 Clustering 优化数据布局,0.10.0 版本随着 Z-Order/Hilbert高阶聚类算法加入,Hudi的数据布局优化日趋强大,Hudi 当前提供以下三种不同的聚类方式,针对不同的点查场景,可以根据具体的过滤条件选择不同的策略
文章插图
关于 Z-Order、Hilbert 具体原理可以查阅相关Wiki,https://en.wikipedia.org/wiki/Z-order 本文不再详细赘述 。
Metadata Table(MDT)Metadata Table(MDT):Hudi的元数据信息表,是一个自管理的 Hudi MoR表,位于 Hudi 表的 .hoodie目录,开启后用户无感知 。同样的 Hudi 很早就支持 MDT,经过不断迭代 0.12版本 MDT 已经成熟,当前 MDT 表已经具备如下能力
经验总结扩展阅读
- 14 基于SqlSugar的开发框架循序渐进介绍-- 基于Vue3+TypeScript的全局对象的注入和使用
- 【Python+C#】手把手搭建基于Hugging Face模型的离线翻译系统,并通过C#代码进行访问
- 基于Qt Designer和PyQt5的桌面软件开发--环境搭建和入门例子
- 域名的由来
- www服务基于什么协议
- 背叛这个词 被背叛了,我们应该基于这几个原则性问题,做出自己的抉择
- 什么是g大调 g大调是什么
- 微博是干什么用的
- 超级sim卡是什么意思
- 越是长大 很多男人对一个女人的了解,那都只会基于表面,并不会有太多