9.spark自适应查询-AQE之动态调整Join策略

目录

  • 概述
  • 动态调整Join策略
    • 原理
    • 实战
  • 动态优化倾斜的 Join
    • 原理
    • 实战

概述

broadcast hash join 类似于 Spark 共享变量中的广播变量,Spark join 如果能采取这种策略,那join 的性能是最好的

  • 自适应查询AQE(Adaptive Query Execution)
    • 动态调整Join策略
      • 原理
      • 实战
    • 动态优化倾斜的 Join
      • 原理
      • 默认环境配置
      • 修改配置

动态调整Join策略

实际上在生产中,特别是工厂中的局限性,表设计的时候,不是那么合理,导致这这种情况,很少见,很难被调整。

原理

AQE 可以将 sort-merge join 转成 broadcast hash join ,条件是当join 表小于自适应 broadcast hash join 的阀值。
开启了自适应查询执行机制之后,可以在运行时根据最精确的数据指标重新规划join策略,实现动态调整join策略。
看以下图:
在这里插入图片描述
后续测试过程中,可以看 spark sql 的执行图。

属性名称默认值解释版本
spark.sql.adaptive.localShuffleReader.enabledtrue当值为true,且spark.sql.adaptive.enabled也为true时,Spark尝试不需要shuffle分区时,使用本地的shuffle读取器读取shuffle数据,例如:在将 sort-merge 转换成 broadcast-hash join 之后3.0.0
spark.sql.adaptive.autoBroadcastJoinThreshold(none)为表配置最大的字节数,能优化成 broadcast join,通过设置此配置为-1,可以禁用 broadcast ,默认值与 spark.sql.autoBroadcastJoinThreshold 相同3.2.0
spark.sql.autoBroadcastJoinThreshold10MB同上1.1.0

当所有的 shuffle partitions 都小于阀值, AQE 将 sort-merge join 转成 shuffled hash join ;最大阀值配置:spark.sql.adaptive.maxShuffledHashJoinLocalMapThreshold

属性名称默认值解释版本
spark.sql.adaptive.maxShuffledHashJoinLocalMapThreshold0为每个分区配置最大的字节数,能够构建 local hash map,如果这个值不小于 spark.sql.adaptive.maxShuffledHashJoinLocalMapThreshold并所有的分区不大于这个配置,join选择更倾向于使用 shuffled hash join,而不是 sort merge join3.2.0

实战

执行的 sql

select count(*) from xx where dt ='2023-06-30' and workorder='011002118525' ;
## 同样的表相连
select * from (select * from xx  where dt ='2023-06-30' and workorder='011002118525') as a
left join  xx as b  on b.dt ='2023-06-30' and b.workorder='011002118525' and  a.id = b.id  ;

在这里插入图片描述
由上图,三百多万的数据,肯定超过10MB了,所以是 sort merge join
在这里插入图片描述
在这里插入图片描述
修改 sql 如下:

select	* from (select id from xx where dt = '2023-06-30' and workorder='011002118525' ) as a join xx as b on a.id = b.id and b.dt = '2023-06-30' and b.unitid = 'H8TGWJ035ZY0000431';

在这里插入图片描述

动态优化倾斜的 Join

原理

数据倾斜严重,将严重影响 join 查询的性能。该功能动态处理在 sort-merge join 倾斜数据时,将其分为大小差不多的任务。当同是启用 spark.sql.adaptive.enabledspark.sql.adaptive.skewJoin.enabled 时,动态优化倾斜 这个功能将生效。

属性名称默认值解释版本
spark.sql.adaptive.skewJoin.enabledtrue当同是启用 spark.sql.adaptive.enabled动态优化倾斜 这个功能将生效3.0.0
spark.sql.adaptive.skewJoin.skewedPartitionFactor5如果分区的大小大于此因子乘以分区大小的中值,并且也大于spark.sql.adaptive.skewJoin.strakedPartitionThresholdInBytes,则该分区被视为偏斜。3.2.0
spark.sql.adaptive.skewJoin.skewedPartitionThresholdInBytes256MB如果分区的字节大小大于此阈值,并且也大于spark.sql.adaptive.skewJoin.strakedPartitionFactor乘以分区大小中值,则该分区被视为偏斜。理想情况下,此配置应设置为大于spark.sql.adaptive.advisoryPartitionSizeInBytes3.0.0

假设有两个表 t1t2,其中表t1中的P0分区里面的数据量明显大于其他分区,默认的执行情况是这样的,看这个图:
在这里插入图片描述

t1表中p0分区的数据比p1\p2\p3这几个分区的数据大很多,可以认为t1表中的数据出现了倾斜
当t1和t2表中p1、p2、p3这几个分区在join的时候基本上是不会出现数据倾斜的,因为这些分区的数据相对适中。但是P0分区在进行join的时候就会出现数据倾斜了,这样会导致 join 的时间过长

动态优化倾斜的 join 机制会把P0分区切分成两个子分区P0-1和P0-2,并将每个子分区关联到表t2的对应分区P0,看这个图:
在这里插入图片描述
t2表中的P0分区会复制出来两份相同的数据,和t1表中切分出来的P0分区的数据进行 join 关联。
这样相当于就把t1表中倾斜的分区拆分打散了,最终在 join 的时候就不会产生数据倾斜了。

实战

todo: 以后如果遇到,再补充上

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue 子页面通过暴露属性,实现主页面的某事件的触发

目录 1.前言2.代码2-1 子页面2-2 主页面 1.前言 需求:当我在子页面定义了一个定时器,点击获取验证码,计时器开始倒计时,在这个定时器没有走完,退出关闭子页面,再次进入子页面,定时器此时会被刷…

linux基础:3.linux基础环境开发工具和配置。

linux基础环境开发工具和配置 一.学习yum工具进行软件安装:1.什么是yum:2.查看软件包:3.安装和删除:4.yum生态: 二.vim的使用:一.快速介绍一下vim二.vim正常模式:2-1:命令模式1.光标…

1、C语言面向对象引入类和对象的概念

什么是类和对象 类 类是用户自定义的一种数据类型&#xff0c;也称类类型——C语言中的结构体 对象 类的一种具象 代码测试 #include <stdio.h>//类 struct Animal{ char name[12];//成员属性 int age; char sex; void (*peat)();//成员方法 void (*pbeat)(); };void…

【排序算法】 快速排序(快排)!图解+实现详解!

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; 算法—排序篇 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言&#x1f324;️快速排序的概念☁️快速排序的由来☁️快速排序的思想☁️快速排序的实…

C++打怪升级(十)- STL之vector

~~~~ 前言1. vector 是什么2. 见见vector的常用接口函数吧构造函数无参构造函数使用n个val构造拷贝构造使用迭代器范围构造初始化形参列表构造 析构函数赋值运算符重载函数元素访问[]运算符重载函数访问at函数访问front函数back函数 迭代器相关正向迭代器反向迭代器 容量相关si…

Head First Java 第二版

不管你的程序有多大&#xff0c;一定都会有一个main()来作为程序的起点。Java是强类型语言。float f23.5f 如果不加上f&#xff0c;就会被Java当做double处理。对于任意一个Java虚拟机来说&#xff0c;所有的引用大小都一样&#xff0c;但是不同的Java虚拟机可能会以不同的方…

多元高斯分布

下面我们来看一下多元高斯分布&#xff0c;叫做 multivariative 高斯分布&#xff0c;也就是目前的情况是向量的形式&#xff0c;也就是说我的 x 它是一个向量&#xff0c;那这个情况下我们的高斯分布应该怎么去表示&#xff1f;我们这里面重点还是来看一下它的一个表示的方法&…

golang 2018,go 1.19安装Gin

GOPROXYhttps://mirrors.aliyun.com/goproxy/ 一致提示URL不能有点&#xff0c;给我整郁闷了&#xff0c;换了这个地址好了 但是一致提示zip的包问题&#xff0c;最后还是不行又换回七牛 NEWBEE&#xff01; [GIN-debug] Environment variable PORT is undefined. Using por…

BIM、建筑机器人、隧道工程施工关键技术

一、BIM简介 &#xff08;一&#xff09;BIM概念 BIM&#xff08;Building Information Modeling&#xff09;&#xff0c;建筑信息模型。该技术通过数字化手段&#xff0c;在计算机中建立虚拟建筑&#xff0c;该虚拟建筑提供从单一到完整、包含逻辑关系的建筑信息库。信息库…

ZZ308 物联网应用与服务赛题第B套

2023年全国职业院校技能大赛 中职组 物联网应用与服务 任 务 书 &#xff08;B卷&#xff09; 赛位号&#xff1a;______________ 竞赛须知 一、注意事项 1.检查硬件设备、电脑设备是否正常。检查竞赛所需的各项设备、软件和竞赛材料等&#xff1b; 2.竞赛任务中所使用的…

Android codec2 视频框架 之输入buffer

文章目录 输入端的内存管理输入数据包buffer结构体的转换 主要的流程如上&#xff0c; 申请内存在CCodecBufferChannel&#xff0c;申请之后回调到MediaCodec。然后应用从MediaCodec获取 将解码数据放到buffer中&#xff0c;CCodecBufferChannel在将这块buffer 送到componet模块…

IS-LM模型:从失衡到均衡的模拟

IS-LM模型&#xff1a;从失衡到均衡的模拟 文章目录 IS-LM模型&#xff1a;从失衡到均衡的模拟[toc] 1 I S − L M 1 IS-LM 1IS−LM模型2 数值模拟2.1 长期均衡解2.2 政府部门引入2.3 价格水平影响2.4 随机扰动因素 1 I S − L M 1 IS-LM 1IS−LM模型 I S − L M IS-LM IS−LM是…

51单片机汇编-点亮一个led

文章目录 前言1.打开IDE2.设置编辑器3.设置输出4. 原理图5.编写代码6 编译7.下载8.其它代码1.LED闪烁2.跑马灯 前言 51单片机基础 51汇编实战 本章主要介绍打开一个led,具体采用51汇编 1.打开IDE 选择STC89C52RC 后缀是.asm 2.设置编辑器 3.设置输出 4. 原理图 5.编写代码 …

HR人才测评,采用线上测评做春招秋招

从人力资源管理的工作&#xff0c;已经有好些年了&#xff0c;我只想说这不是一个有创意和创造性的工作&#xff0c;因为大部分时间我都在从事数据方面的工作。关于公司内部的文案工作先且不说&#xff0c;这里分享下我做招聘工作的过程。 每年春秋两季的校招&#xff0c;算是…

通过51单片机控制SG90舵机按角度正反转转动

一、前言 本文介绍如何通过51单片机控制SG90舵机实现角度的正反转转动。SG90舵机是一种常用的微型舵机&#xff0c;具有体积小、重量轻、结构简单等特点&#xff0c;被广泛应用于机器人、遥控模型和各种自动控制系统中。 使用51单片机&#xff08;STC89C52&#xff09;作为控…

5-爬虫-打码平台、打码平台自动登录打码平台、selenium爬取京东商品信息、scrapy介绍安装、scrapy目录结构

1 打码平台 1.1 案例 2 打码平台自动登录打码平台 3 selenium爬取京东商品信息 4 scrapy介绍安装 5 scrapy目录结构 1 打码平台 # 1 登录某些网站&#xff0c;会有验证码---》想自动破解-数字字母&#xff1a;python模块&#xff1a;ddddocr-计算题&#xff0c;成语题&#xf…

CSS3 边框、圆角、背景

CSS3是最新的CSS标准。CSS3被拆分为“模块”。一些最重要的CSS3模块如下&#xff1a;选择器、盒模型、背景和边框、文字特效、2D/3D转换、动画、多列布局、用户界面。 一、CSS3边框&#xff1a; 用CSS3&#xff0c;可以创建圆角边框、添加阴影框&#xff0c;并作为边界的形象而…

【单目测距】单目相机测距(三)

文章目录 一、前言二、测距代码2.1、地面有坡度2.2、python代码2.2.1、旋转矩阵转角度2.2.2、角度转旋转矩阵2.2.3、三维旋转原理 (Rotation 原理)2.2.4、完整代码 2.3、c 代码 一、前言 上篇博客【单目测距】单目相机测距&#xff08;二&#xff09; 有讲到当相机不是理想状态…

17.复制字符串 ,包括\0

#include<stdio.h> #include <cstring>int main(){int len1,len2;char s1[44];char s2[33];scanf("%s",s1);scanf("%s",s2);len1strlen(s1)1;printf("先s1的字符长度为&#xff1a;%d\n",len1) ;strcpy(s1,s2) ;printf("复制字…

前端AJAX入门到实战,学习前端框架前必会的(ajax+node.js+webpack+git)(三)

知者乐水&#xff0c;仁者乐山。 XMLHttpRequest AJAX原理 - XMLHttpRequest 前面与服务器交互使用的不是axios吗&#xff1f; ajax并不等于axios 我们使用的axios的内部&#xff0c;实际上对XHR对象/原理 的封装 为什么还要学习ajax&#xff1f; ①在一些静态网站项目中…
最新文章