Spark之Adaptive Query Execution

这篇具有很好参考价值的文章主要介绍了Spark之Adaptive Query Execution。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Adaptive Query Execution

自适应查询执行(AQE)是Spark SQL中的一种优化技术,利用运行时的统计信息来选择最高效的查询执行计划。

  • spark3.2起,默认启用。可以通过设置spark.sql.adaptive.enabled为true启用。
  • spark3,AQE主要有以下功能:通过合并减少shuffle分区数、将sore-merge join转换为broadcast join、优化数据倾斜

Coalescing Post Shuffle Partitions

简单来讲该特性用于调整shuffle分区数量,用户不需要精心为数据集设置合适的shuffle分区数量。只需设置一个较大的初始shuffle分区数量,但AQE会基于实际map阶段的输出统计来合并shuffle分区,从而选择一个合适的分区数量。

Property Name Default Meaning Since Version
spark.sql.adaptive.coalescePartitions.enabled true AQE启用后,将该参数置为true,spark将根据advisoryPartitionSizeInBytes参数指定的大小自动合并相邻的shuffle分区,防止出现太多的小task 3.0.0
spark.sql.adaptive.coalescePartitions.parallelismFirst true 为true时,spark在合并相邻shuffle分区时,将会忽略advisoryPartitionSizeInBytes参数指定的大小。只按照salecePartitions.minPartitionSize参数指定的大小来划分最小分区大小,以最大限度地提高并行性--------------------------------------------该配置是为了防止启用AQE后,性能出现回退。建议不使用该配置而使用advisoryPartitionSizeInBytes参数指定 3.2.0
spark.sql.adaptive.coalescePartitions.minPartitionSize 1MB 合并后shuffle分区的最小大小,该值最多可以是advisoryPartitionSizeInBytes参数的20%。 3.2.0
spark.sql.adaptive.coalescePartitions.initialPartitionNum (none) shuffle分区的初始化数量。默认未设置,等于spark.sql.shuffle.partitions参数的值。只有当AQE和coalescePartitions配置启用时才有效。 3.0.0
spark.sql.adaptive.advisoryPartitionSizeInBytes 64 MB AQE优化时,shuffle分区的建议大小(以字节为单位) 3.0.0

Spliting skewed shuffle partitions

Property Name Default Meaning Since Version
spark.sql.adaptive.optimizeSkewsInRebalancePartitions.enabled true 当AQE启用,并且该参数为true时。spark将优化ReblancePartitions中倾斜的shuffle分区,并根据目标大小(由spark.sql.adaptive.advisoryPartitionSizeInBytes指定)将其拆分为更小的分区,以避免数据偏斜 3.2.0
spark.sql.adaptive.rebalancePartitionsSmallPartitionFactor 0.2 如果分区大小小于该因子乘以spark.sql.adaptive.advisoryPartitionSizeInBytes参数的值,将在拆分过程中被合并 3.3.0

Converting sort-merge join to broadcast join

在运行统计时,AQE会将sort-merge join 转换为broadcast hash join。broadcast hash join可以在本地读取shuffle文件以节省网络流量。

Property Name Default Meaning Since Version
spark.sql.adaptive.autoBroadcastJoinThreshold (none) 执行join时,广播到所有worker节点的表的最大大小(以字节为单位)。如果设置为-1,则禁用broadcast。默认值等于spark.sql.autoBroadcastJoinThreshold。该配置仅用于自适应框架。 3.2.0
spark.sql.adaptive.localShuffleReader.enabled true AQE启动,同时该参数为true时。spark会尝试使用本地shuffle reader来读取数据 3.0.0

Converting sort-merge join to shuffled hash join

当所有的shuffle分区小于阈值(spark.sql.adaptive.maxShuffledHashJoinLocalMapThreshold)时,AQE会将sort-merge join转换为shuffled hash join。

Property Name Default Meaning Since Version
spark.sql.adaptive.maxShuffledHashJoinLocalMapThreshold 0 配置被允许构建本地hash map分区的最大值。如果该值大于等于advisoryPartitionSizeInBytes,并且小于等于所有分区大小。则无论spark.sql.join.preferSortMergeJoin参数值怎样设置,join的更倾向于使用shuffled hash join替代sort merge join 3.2.0

Optimizing Skew Join(for sore-merge join)

数据倾斜会严重降低join查询的性能。当AQE启用并且spark.sql.adaptive.skewJoin.enabled参数的值为true时,spark会在sort-merge join中将倾斜的tasks拆分为大小基本相等的task来处理倾斜问题。文章来源地址https://www.toymoban.com/news/detail-791014.html

Property Name Default Meaning Since Version
spark.sql.adaptive.skewJoin.enabled true 当AQE启用并且spark.sql.adaptive.skewJoin.enabled参数的值为true时,spark会通过在sort-merge join中拆分倾斜的分区来动态调整倾斜 3.0.0
spark.sql.adaptive.skewJoin.skewedPartitionFactor 5.0 如果分区的大小大于此因子乘以分区大小的中值,并且也大于spark.sql.adaptive.skewJoin.strakedPartitionThresholdInBytes,则将其视为倾斜分区 3.0.0
spark.sql.adaptive.skewJoin.skewedPartitionThresholdInBytes 256M 如果分区的大小大于该值,并且大于spark.sql.adaptive.skewJoin.skewedPartitionFactor参数的值乘以中间分区大小,则将其视为倾斜分区。理想情况下,该配置的值应该大于spark.sql.adaptive.advisoryPartitionSizeInBytes参数的值 3.0.0
spark.sql.adaptive.forceOptimizeSkewedJoin false 为true时,即使引入了额外的shuffle,也将强制启用OptimizeSkewedJoin,用于优化倾斜join以避免较大任务 3.3.0

其他配置

Property Name Default Meaning Since Version
spark.sql.adaptive.optimizer.excludedRules none 配置自适应优化器禁用的规则列表,规则名字以逗号分隔。优化器将记录被排除的规则 3.1.0
spark.sql.adaptive.customCostEvaluatorClass none 自定义用于自适应执行的评估代价类。如果未设置,spark将默认使用自己的SimpleCostEvaluator 3.2.0

到了这里,关于Spark之Adaptive Query Execution的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 大数据开发之Spark(RDD弹性分布式数据集)

    rdd(resilient distributed dataset)叫做弹性分布式数据集,是spark中最基本的数据抽象。 代码中是一个抽象类,它代表一个弹性的、不可变、可分区、里面的元素可并行计算的集合。 1.1.1 rdd类比工厂生产 1.1.2 wordcount工作流程 1、一组分区(partition),即是数据集的基本组成单位,

    2024年01月24日
    浏览(71)
  • 大数据课程K2——Spark的RDD弹性分布式数据集

    文章作者邮箱:yugongshiye@sina.cn              地址:广东惠州 ⚪ 了解Spark的RDD结构; ⚪ 掌握Spark的RDD操作方法; ⚪ 掌握Spark的RDD常用变换方法、常用执行方法; 初学Spark时,把RDD看做是一个集合类型(类似于Array或List),用于存储数据和操作数据,但RDD和普通集合的区别

    2024年02月12日
    浏览(55)
  • 大数据开源框架环境搭建(七)——Spark完全分布式集群的安装部署

    前言:七八九用于Spark的编程实验 大数据开源框架之基于Spark的气象数据处理与分析_木子一个Lee的博客-CSDN博客_spark舆情分析 目录 实验环境: 实验步骤: 一、解压 二、配置环境变量:  三、修改配置文件  1.修改spark-env.sh配置文件: 2.修改配置文件slaves: 3.分发配置文件:

    2024年02月11日
    浏览(54)
  • Execution Error, return code 3 from org.apache.hadoop.hive.ql.exec.spark.SparkTask. Spark job faile

    hive on spark 错误Error while processing statement: FAILED: Execution Error, return code 3 from org.apache.hadoop.hive.ql.exec.spark.SparkTask. Spark job failed during runtime. Please check stacktrace for the root cause. 表明Spark任务执行失败,返回了错误代码3。这可能是由于多种原因导致的,例如内存不足、JSON数据格式错

    2024年04月11日
    浏览(58)
  • 云计算与大数据第16章 分布式内存计算平台Spark习题

    1、Spark是Hadoop生态(  B  )组件的替代方案。 A. Hadoop     B. MapReduce        C. Yarn             D.HDFS 2、以下(  D  )不是Spark的主要组件。 A. Driver      B. SparkContext       C. ClusterManager D. ResourceManager 3、Spark中的Executor是(  A  )。 A.执行器      B.主节

    2024年02月14日
    浏览(119)
  • 分布式计算中的大数据处理:Hadoop与Spark的性能优化

    大数据处理是现代计算机科学的一个重要领域,它涉及到处理海量数据的技术和方法。随着互联网的发展,数据的规模不断增长,传统的计算方法已经无法满足需求。因此,分布式计算技术逐渐成为了主流。 Hadoop和Spark是目前最为流行的分布式计算框架之一,它们都提供了高

    2024年01月23日
    浏览(57)
  • 数据存储和分布式计算的实际应用:如何使用Spark和Flink进行数据处理和分析

    作为一名人工智能专家,程序员和软件架构师,我经常涉及到数据处理和分析。在当前大数据和云计算的时代,分布式计算已经成为了一个重要的技术方向。Spark和Flink是当前比较流行的分布式计算框架,它们提供了强大的分布式计算和数据分析功能,为数据处理和分析提供了

    2024年02月16日
    浏览(62)
  • 【Spark分布式内存计算框架——Spark 基础环境】1. Spark框架概述

    第一章 说明 整个Spark 框架分为如下7个部分,总的来说分为Spark 基础环境、Spark 离线分析和Spark实时分析三个大的方面,如下图所示: 第一方面、Spark 基础环境 主要讲述Spark框架安装部署及开发运行,如何在本地模式和集群模式运行,使用spark-shell及IDEA开发应用程序,测试及

    2024年02月11日
    浏览(67)
  • 分布式计算框架:Spark、Dask、Ray 分布式计算哪家强:Spark、Dask、Ray

    目录 什么是分布式计算 分布式计算哪家强:Spark、Dask、Ray 2 选择正确的框架 2.1 Spark 2.2 Dask 2.3 Ray 分布式计算是一种计算方法,和集中式计算是相对的。 随着计算技术的发展, 有些应用需要非常巨大的计算能力才能完成,如果采用集中式计算,需要耗费相当长的时间来完成

    2024年02月11日
    浏览(70)
  • Hadoop(伪分布式)+Spark(local模式)搭建Hadoop和Spark组合环境

    环境 使用 Ubuntu 14.04 64位 作为系统环境(Ubuntu 12.04,Ubuntu16.04 也行,32位、64位均可),请自行安装系统。 Hadoop版本 : Hadoop 2.7.4 创建hadoop用户 如果你安装 Ubuntu 的时候不是用的 \\\"hadoop\\\" 用户,那么需要增加一个名为 hadoop 的用户。 首先按 ctrl+alt+t 打开终端窗口,输入如下命令创

    2023年04月08日
    浏览(70)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包