Spark数据倾斜优化-AQE Skewed Join

news2024/11/23 12:04:02

AQE处理SkewedJoin的原理

Spark Adaptive Query Execution , 简称 Spark AQE,总体思想是动态优化和修改 stage 的物理执行计划。利用执行结束的上游 stage 的统计信息(主要是数据量和记录数),来优化下游 stage 的物理执行计划。
Spark AQE 处理数据倾斜的原理如下:
mapTask 完成后,driver 先统计 map satus,维护一个 array,里面是这个 MapTask 发给下游 reducer 的数据大小。
比如 mapTask-1:[100m,100m,1G]。即 reduceTask-1 获取 mapTask-1 的 100m 数据, reduceTask-2 获取 mapTask-1 的 100m 数据,reduceTask-3 获取 mapTask-1 的 1G 数据。在这个 stage 中,还有 mapTask-2:[100m,100m,100m] 、mapTask-3:[100m,100m,100m]
那么最终 reduceTask-1 处理的总数据量为 0.3G,reduceTask-2: 0.3G reduceTask-3: 1.2G 。中位数为 0.3G,reduceTask-3 处理了 1.2G,是中位数的 4 倍,可以判断为 reduceTask-3 倾斜。
对于大任务而言,统计 map satus 会占据大量的 Driver 内存,假设有 M 个 mapTask 和 R 个 reduceTask, 则 map status 的空间复杂度是 O(M * R)。 所以社区版会进行压缩。压缩分为两种一种是 CompressedMapStatus、另一种是 HighlyCompressedMapStatus
当下游 reduceTask 超过 2000(默认值) 时,使用 HighlyCompressedMapStatus。这种方式很粗暴,压缩时只保留了 MapStatus 中大块的数据大小(比如超过 100m 的为大块。)
比如 mapTask-1:[1m, 20m, 5m…(1999 个,假设都小于 100m), 100m],这时候 HighlyCompressedMapStatus 生效,只保留 100M 块大小,其他 1999 个块用(假设)平均值 10m 代替。

某些情况,会造成下游 reduceTask 统计数据不准,即下图应该都用平均值代替,因为所有数据量都没超过accurateBlockThreshold的值(默认 100M),这样所有 reduceTask 有相同的数据量,但真实情况是 reduceTask-0 处理 500G 数据,reduceTask-1 处理 100M 数据。这样识别不了倾斜。
在这里插入图片描述

建议参数:

  1. spark.shuffle.highlyCompressedMapStatusThreshold(默认 5000)需要大于等于spark.sql.adaptive.maxNumPostShufflePartitions(设置相等即可,默认 2000),否则 AQE SkewedJoin 可能无法生效。
  2. spark.sql.adaptive.maxNumPostShufflePartitions设置过高(例如超过 2w),会增加 driver cpu 的压力,可能出现 executor 心跳注册超时的可能 ,建议同时提高 driver 的内存和 cpu 个数。
  3. 倾斜非常严重,被拆分后倾斜仍然很严重,可能是 shuffle 分布统计精度太低,需要降低spark.shuffle.accurateBlockThreshold,默认为 100M,可按需降低(例如改成 4M 或 1M)。
    a. 需要注意的是,降低该参数会增加 Driver 内存的压力(统计数据更加精确),为防止出现 Driver OOM 等问题,建议同时提高 driver 的内存和 cpu 个数

AQE SkewedJoin生效条件

Join物理算子类型

AQE的SkewedJoin只针对SortMergeJoinShuffleHashJoin,对于BroadcastHashJoin无法生效。

JoinType

由于AQE的原理是拆分Partition,并分别与对应的Partition进行Join操作,然后将结果Union,所以对于Outer Join,非Outer Side是无法拆分的。
假设JoinType为LeftOuter,则如果Join的右侧输入存在倾斜,AQE是无法处理的。如果JoinType为Inner,则Join两边的倾斜都是可以处理的。

Join Pattern

AQE的优化是Stage级别的,即AQE在Stage执行之前,会根据当前Stage的已完成的上游的统计信息,对当前Stage进行优化调整。目前AQE支持如下几种包含SortMergeJoin的Stage Pattern。

  1. Normal Join
    最常见的Join Pattern,Stage10中,只有一个SortMergeJoin,且两边都是Sort + Exchange的组合.在这里插入图片描述
  2. JoinWIthAgg
    Stage10中,同样只有一个SortMergeJoin,但是Join的一边并不是Sort+Exchange的组合,而是存在Aggregate算子
    注:Join两边的倾斜是否可以处理,除了与JoinType有关,还与是否存在Agg算子有关。存在Agg算子的一侧也是无法处理倾斜的。例如,JoinType为Right Outer,且Join的右侧存在Agg算子,则Join两边的倾斜都无法处理。因为拆分后不符合agg算子对分布的需求,正确性会有问题
    在这里插入图片描述
  3. MultipleJoinWithAggOrWin
    从下图我们可以看到,Stage 19 中存在连续的 Join,且还存在 HashAgg 算子,目前开源版本不支持。在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/717008.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

记一次自建靶场域渗透过程

为方便您的阅读,可点击下方蓝色字体,进行跳转↓↓↓ 01 环境搭建02 外网突破03 权限提升并维持(1)获取 meterpreter 会话(2)尝试开启远程桌面(3)Msf 派生 Cobalt Strike shell&#…

TinyStories: How Small Can Language Models Be and Still Speak Coherent English?

本文是LLM系列的文章之一,针对《TinyStories: How Small Can Language Models Be and Still Speak Coherent English?》的翻译。 TinyStories:语言模型能有多小,还能说连贯的英语? 摘要1 引言2 TinyStories数据集的描述2.1 Tiny…

<td>标签内的文字内容换行显示

修改前: 修改后: 代码: table tr td{ word-WRAP: break-word }

CI-持续集成 — 软件工业“流水线”技术实现

1 概述 持续集成(Continuous Integration)是一种软件开发实践。在本系列文章的前一章节已经对其背景及理论体系进行了介绍。本小节则承接前面提出的理论构想进行具体的技术实现。 《Google软件测试之道》: "每天,Google都要测试和发…

(模拟) 463. 岛屿的周长 ——【Leetcode每日一题】

❓ 463. 岛屿的周长 难度:简单 给定一个 row x col 的二维网格地图 grid ,其中:grid[i][j] 1 表示陆地,grid[i][j] 0 表示水域。 网格中的格子 水平和垂直 方向相连(对角线方向不相连)。整个网格被水完…

前端Vue自定义可自由滚动精美tabs选项卡标签栏标题栏 可设置背景颜色,

前端Vue自定义可自由滚动精美tabs选项卡标签栏标题栏 可设置背景颜色&#xff0c; 下载完整代码请访问uni-app插件市场地址&#xff1a;https://ext.dcloud.net.cn/plugin?id13313 效果图如下&#xff1a; # cc-scrollTag #### 使用方法 使用方法 <!-- tabChange: tab选…

Vue指令--v-bind、v-model、v-on

常见指令--v-bind/model/on 指令&#xff1a;HTML标签中带有v-前缀的特殊属性&#xff0c;不同指令具有不同含义。例如&#xff1a;v-if&#xff0c;v-for..常见指令 指令 作用 v-bind为HTML标签绑定属性值&#xff0c;如设置href、css样式等v-model在表单元素上创建双向数据…

【网络原理之二】网络层的IP协议、数据链路层的以太协议和MTU

网络层协议IP协议IP协议格式IP地址IPV4IPV6 IP地址规则-地址管理路由选择 数据链路层协议以太网协议协议格式 MTU(最大传输单元)MTU对IP协议的影响MTU对UDP协议的影响MTU对TCP协议的影响 开放性问题 网络层协议 IP协议 IP协议格式 4位版本号(version)&#xff1a;指定IP协议的…

12-Vue的diff算法

参考回答&#xff1a; 当组件创建和更新时&#xff0c;vue均会执行内部的update函数&#xff0c;该函数使用render函数生成的虚拟dom树&#xff0c;将新旧两树进行对比&#xff0c;找到差异点&#xff0c;最终更新到真实dom对比差异的过程叫diff&#xff0c;vue在内部通过一个叫…

ChatGPT系统源码,全开源支持二开!

ChatGPT是开发的大语言模型之一&#xff0c;具备多领域知识&#xff0c;并且可以提供个性化、准确和有趣的答案&#xff0c;无论是在娱乐、教育还是工作中&#xff0c;都可以帮助我们解决问题、获取信息和提供建议。 技术架构 使用流行的技术栈PHP8、TypeScript、ThinkPHP6、…

7.3基础概念/文件、文件路径/batch_size,length,total/acc、loss计算/ect

一、 一些基础术语&#xff1a; util是utility的缩写&#xff0c;意思为实用工具。一般用于描述和业务逻辑没有关系的数据处理分析工具。 logger &#xff1a;日志 meter : 记录表 使用下划线 _ 表示不需要的变量是一种常见的开发者的约定&#xff0c;&#xff08;Python 解释…

SpringBoot3 事件和监听器

1. 生命周期监听 场景&#xff1a;监听应用的 生命周期 1. 监听器-SpringApplicationRunListener 自定义SpringApplicationRunListener来监听事件&#xff1b; 编写SpringApplicationRunListener 实现类在 META-INF/spring.factories 中配置 org.springframework.boot.SpringA…

【数据挖掘】时间序列教程【八】

4.4 时间混淆 我们先考虑一个简单的线性回归模型, 哪里 和是具有平均值的高斯过程00和自协方差 .现在,在不失去一般性的情况下,让我们假设 而那瓦尔

【UGUI控件全面解析】 教程专栏目录贴

&#x1f3ac;【UGUI控件全面解析】 教程专栏目录贴&#x1f431;‍&#x1f3cd;UGUI系列内容介绍&#x1f381;文章内容结构介绍 &#x1f4af;总结 &#x1f3ac; 博客主页&#xff1a;https://xiaoy.blog.csdn.net &#x1f3a5; 本文由 呆呆敲代码的小Y 原创&#xff0c;…

“金九银十”和秋招通过率达 95% 的 Java 面试要点集锦

前言 这才刚刚进入 7 月&#xff0c;我就看到了许多朋友在焦急的准备“金九银十”跳槽面试&#xff0c;甚至很多即将毕业的大学生都在备战秋招&#xff0c;对于学历还算优秀的大学生来说&#xff0c;这是一次离大厂最近的机会&#xff0c;毕竟是应届毕业生&#xff0c;不会对技…

Selenium Wire编辑header破解反爬机制和访问限制

一、selenium Wire介绍 介绍 Selenium Wire扩展了Selenium的Python绑定&#xff0c;使您能够访问浏览器发出的底层请求。您已使用Selenium相同的方式编写代码&#xff0c;但是您获得了额外的api&#xff0c;用于检查请求和响应&#xff0c;并动态地对它们进行更改。&#xff08…

oracle 基础1

目录 Oracle表空间-创建 Oracle表空间-删除 Oracle常用用户 Oracle常用角色 Oracle用户创建 Oracle常用数据类型 Oracle表创建 Oracle增删改查 Oracle表常见约束 0.oracle手动开启方式 1.Oracle 表空间-创建 plsql登录system用户 新建sql窗口 创建表空间 2.Oracle表…

化亿级海量于秒级瞬间:大表关联计算提速

5G 时代&#xff0c;意味着数据通信将会拥有更高的速率、更大的容量和更低的时延。随着数据量的爆发式增长&#xff0c;对海量数据存储和实时分析成为数据淘金者的刚需&#xff0c;数据量暴增导致数据间的关联分析也越来越频繁。如何快速对数据进行分析&#xff0c;并获取其中有…

Jmeter接口测试参数化详解

目录 前言&#xff1a; RandomString函数 CSVRead函数 CSV Data Set Config配置元件 前言&#xff1a; 在进行接口测试时&#xff0c;参数化是一项重要的技术&#xff0c;可以帮助测试人员有效地模拟不同的场景和数据&#xff0c;增加测试用例的覆盖范围。JMeter提供了多种…

2023 年 10 大前端发展趋势

新技术的出现和老技术的淘汰让前端开发者们需要不断地学习和更新知识。特别是在经济不好的情况下&#xff0c;是否掌握新的技术很大程度决定着你是否被淘汰。 虽然应用程序试图将网站替代&#xff0c;但前端 Web 开发业务仍在快速变化和增长&#xff0c;前端开发人员的功能并没…