IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Spark3自适应查询计划(Adaptive Query Execution,AQE) -> 正文阅读

[大数据]Spark3自适应查询计划(Adaptive Query Execution,AQE)

动态合并shuffle分区(Dynamically coalescing shuffle partitions)
动态调整join策略(Dynamically switching join strategies)
动态优化数据倾斜join(Dynamically optimizing skew joins)
参数:spark.sql.adaptive.enabled 默认关闭,开启此参数后上述三种策略才会执行
在这里插入图片描述
1、动态优化数据倾斜(Dynamically optimizing skew joins)
spark.sql.adaptive.skewJoin.enabled 默认 true

相关参数:
①、spark.sql.adaptive.skewJoin.skewedPartitionFactor 默认5
倾斜分区数据大小 > 整个RDD分区分区大小的中位数 * 此参数配置的值
在这里插入图片描述
②、spark.sql.adaptive.skewJoin.skewedPartitionThresholdInBytes 默认256MB
倾斜分区数据大小 > 此参数的默认值
在这里插入图片描述
同时满足①、②这两个条件参会判定此分区倾斜需要进行裁剪
③、spark.sql.adaptive.advisoryPartitionSizeInBytes 默认64MB
优化后的分区大小 = max(此参数, 非数据倾斜partition的平均大小)
在这里插入图片描述
在Reduce阶段进行自动倾斜处理的拆分操作,在同一个Executor内部,本该由一个Task处理的大分区,被AQE拆成多个小分区并交由多个Task去计算,这样可以解决Task之间的负载均衡。但解决不了不同Excuter之间的负载均衡。如果倾斜的分区都分到了一个Executor上,那么这个Executor的计算能力还是整个作业的瓶颈。
如果左右两边的表都出现了数据倾斜现象,需要对左右两张表的倾斜分区都进行拆分操作,左表拆分M各分区,右表拆分N各分区,那么每张表最终需要保证M*N个分区才能保证逻辑关联的一致性。所以在极端情况下对拆分的分区拉取、复制所需要的开销会不可控。
2、动态合并shuffle分区(Dynamically coalescing shuffle partitions)
spark.sql.adaptive.coalescePartitions.enabled 默认 true

优化类型:物理计划 CoalesceShufflePartitions
统计信息:每个Reduce Task分区大小

发生在Shuffle Map完成后的Reduce阶段,Reduce Task将数据分片全部拉回,AQE按照分区编号的顺序,依次把小于目标尺寸的分区合并到一起。目标分区尺寸由一下两个参数决定
spark.sql.adaptive.advisoryPartitionSizeInBytes,默认64M。
spark.sql.adaptive.coalescePartitions.minPartitionNum,最小分区数,默认spark集群的默认并行度。
最终的targetSize为:首先计算出总的shuffle的数据大小totalPostShuffleInputSize;
maxTargetSize为max(totalPostShuffleInputSize/minPartitionNum,16);targetSize=min(maxTargetSize,advisoryPartitionSizeInBytes)

3、动态调整join策略(Dynamically switching join strategies)
spark.sql.adaptive.localShuffleReader.enabled 默认true

优化类型:逻辑计划 DemoteBroadcastHashJoin
物理计划 OptimizeLocalShuffleReader
统计信息:Map阶段中间文件总大小、中间文件空文件占比

DemoteBroadcastHashJoin:把Shuffle Joins降级为Broadcast Joins。仅适用于Shuffle Sort Merge Join。当两张表完成Shuffle Map阶段后,会继续判断某一张表是否满足一下两个条件
中间文件尺寸总和小于广播阈值 spark.sql.autoBroadcastJoinThreshold(10M)
空文件占比小于配置项 spark.sql.adaptive.nonEmptyPartitionRatioForBroadcastJoin(0.2)
只要有一个表满足就会降级

OptimizeLocalShuffleReader:因为AQE依赖的统计信息来自于Shuffle Map阶段生成的中间文件,所以在AQE开始优化前,Shuffle操作已经执行过半。
两张大表join,超过了广播阈值的话Spark SQL最初会选择SortMerge Join,AQE只有结合两个表join中的Exchange才能进行降级判断,所以两张表必须都完成Map且中间文件落盘。AQE才会决定是否降级以及用那张表做广播变量
spark.sql.adaptive.localShuffleReader.enabled(true)完成省去Shuffle常规操作中的网络分发,Reduce Task可以就读取本地节点(local)的中间文件,完成与广播小表的关联操作。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-07-26 12:08:54  更:2021-07-26 12:10:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/9 5:46:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码