Spark内容分享(二十):网易基于 Kyuubi + Spark 内核优化以及实践

本文介绍了ApacheSpark的AdaptiveQueryExecution(AQE)技术的发展历程,以及AQE在Shuffle阶段的优化,如SmallReducePartition和SkewedReducePartition,以及如何通过动态优化执行计划来提高SQL性能。此外,文章还详细讨论了Kyuubi如何与Spark结合,提升数仓类任务的安全性和性能,特别是通过Rebalance和Z-Order优化数据产出质量与存储成本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 目录

 Apache Spark - Adaptive Query Execution/AQE 

1. AQE–History

2. AQE–Shuffle

3. AQE - Small Reduce Partition

4. AQE – Skewed Reduce Partition

5. AQE – Optimize Plan

Kyuubi + Spark 数仓类任务优化实践

1. Kyuubi + Spark – 架构

2. Kyuubi+Spark–安全

3. Kyuubi+Spark–方案

4. Kyuubi+Spark–数据


Apache Spark - Adaptive Query Execution/AQE 

1. AQE–History

  • 自适应查询

  • Adaptive/AQE/AE

图片

下面先来讲一下 Apache Spark Adaptive Query Execution 的一些历史, AQE 在不管是 Spark 开源代码里面还是在技术博客里面出现的频率越来越高,我们一般会用 AQE 这种缩写去简称它。

  • Spark 2.X

AQE 在Spark 2.X版本其实就已经有了一定的雏形。但是整个框架是非常 Hack 的,并且存在很多 Bug,它提供的功能就是可以合并一些小的分区。除此之外也没有别的功能,设计非常简单。

  • Spark 3.0

到 Spark 3.0的这个开发阶段,Intel 提出了一个基于 AQE 的新框架。在这个框架下我们可以做非常多事情,主要围绕两部分:

    ①对于 Shuffle Reader 阶段的各种优化

包括我们现在可以想到的一些Join 倾斜优化、 Local Shuffle Reader 的优化。这些优化在现在这个框架里都非常简单,只需要添加一些规则就可以支持。

    ②通过优化执行计划来进一步去优化 SQL 性能

比如我们以前见到的广播 Join,在 AQE 这个特性里面可以在运行时动态地将我们的 Join 转化成广播 Join 来跑。这一层面提高了 SQL 的性能。

  • Spark 3.1

Spark 3.1时代,网易开始进入并参与到了 AQE 特性的优化和增强。到目前为止,大概有40多个 Patch 已经合入了 Apache Spark 的社区。

网易内部默认打开了 AQE 特性并且效果非常好,相比于原来的Spark2.x 版本,几乎每个在TPC-DS性能测试下,几乎有 100% 的性能提升。

  • Spark 3.2

Spark 3.2才把 AQE 特性默认开启我相信在未来即将发布的 Spark 版本里面, AQE 会发挥更多更重要的作用,也还会有更多的特性的引入进来。

2. AQE–Shuffle

  • Small Reduce Partition

  • Skewed Reduce Partition

图片

下面来讲一下 AQE 整个的一个设计,它解决了什么问题?以及它是如何解决的?

  • 我们看一个非常简单的一张 Shuffle 图:

左边部分:是 Shuffle 的 Map 阶段,也就是负责写 Shuffle 数据的这一个 Stage

右边部分:是负责 Read Shuffle 数据的 Stage

中间部分:是 Spark Shuffle Block

可以看到,这是个非常简单的 Demo,它的数据已经出现了非常小的一些分区,实际在 Reduce 分区里面只有3个分区是有数据的,剩下197个是空的。我们知道这200个分区是 Spark 默认的分区配置,也就是我们经常会调整的 SQL Shuffle Partition 的配置。

  • 这个 Shuffle 其实已经引入2个问题:

①假设我们期望每个分区只处理两条数据,Task5 分区已经出现了数据倾斜

②剩下的分区都是小分区,或者是根本没有数据的分区无效分区,这些分区在 Spark  整个调度层面会造成非常严重的 Task 资源浪费。

  • AQE 的诞生就是为了解决这些问题

3. AQE - Small Reduce Partition

  • Coalesce Shuffle Partition

图片

我们先来看一下第一个问题,Small Reduce Partition , 也就是 Reduce 分区处理的数据量很小。在 Spark 的 AQE 的框架里面,这个特性的规则就是 Coalesce Shuffle Partition。Shuffle Partition 其实是和 Reduce Partition 等价的,在 Spark 代码里面这个特性规则就命名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

之乎者也·

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值