Spark的执行计划

Spark 3.0 大版本发布,Spark SQL 的优化占比将近 50%。Spark SQL 取代 Spark Core,成为新一代的引擎内核,所有其他子框架如 Mllib、Streaming 和 Graph,都可以共享 Spark SQL 的性能优化,都能从 Spark 社区对于 Spark SQL 的投入中受益。

要优化SparkSQL应用时,一定是要了解SparkSQL执行计划的。发现SQL执行慢的根本原因,才能知道应该在哪儿进行优化,是调整SQL的编写方式、还是用Hint、还是调参,而不是把优化方案拿来试一遍。

1 准备测试用表和数据

1、上传3个log到hdfs新建的sparkdata路径

2、hive中创建sparktuning数据库

3、执行

spark-submit --master yarn --deploy-mode client --driver-memory 1g --num-executors 3 --executor-cores 2 --executor-memory 4g --class com.atguigu.sparktuning.utils.InitUtil spark-tuning-1.0-SNAPSHOT-jar-with-dependencies.jar

2 基本语法

.explain(mode="xxx")

从3.0开始,explain方法有一个新的参数mode,该参数可以指定执行计划展示格式:

  • explain(mode="simple"):只展示物理执行计划。
  • explain(mode="extended"):展示物理执行计划和逻辑执行计划。
  • explain(mode="codegen") :展示要Codegen生成的可执行Java代码。
  • explain(mode="cost"):展示优化后的逻辑执行计划以及相关的统计。
  • explain(mode="formatted"):以分隔的方式输出,它会输出更易读的物理执行计划,并展示每个节点的详细信息。

3 执行计划处理流程

核心的执行过程一共有5个步骤:

这些操作和计划都是Spark SQL自动处理的,会生成以下计划:

  • Unresolved逻辑执行计划:== Parsed Logical Plan ==

Parser组件检查SQL语法上是否有问题,然后生成Unresolved(未决断)的逻辑计划,不检查表名、不检查列名。

  • Resolved逻辑执行计划:== Analyzed Logical Plan ==

通过访问Spark中的Catalog存储库来解析验证语义、列名、类型、表名等。

  • 优化后的逻辑执行计划:== Optimized Logical Plan ==

Catalyst优化器根据各种规则进行优化。

  • 物理执行计划:== Physical Plan ==

1)HashAggregate运算符表示数据聚合,一般HashAggregate是成对出现,第一个HashAggregate是将执行节点本地的数据进行局部聚合,另一个HashAggregate是将各个分区的数据进一步进行聚合计算。

2)Exchange运算符其实就是shuffle,表示需要在集群上移动数据。很多时候HashAggregate会以Exchange分隔开来。

3)Project运算符是SQL中的投影操作,就是选择列(例如:select name, age...)。

4)BroadcastHashJoin运算符表示通过基于广播方式进行HashJoin。

5)LocalTableScan运算符就是全表扫描本地的表。

4 案例实操

将提供的代码打成jar包,提交到yarn运行

spark-submit --master yarn --deploy-mode client --driver-memory 1g --num-executors 3 --executor-cores 2 --executor-memory 4g --class com.atguigu.sparktuning.explain.ExplainDemo spark-tuning-1.0-SNAPSHOT-jar-with-dependencies.jar

相关推荐
程序猿阿伟8 分钟前
《分布式追踪Span-业务标识融合:端到端业务可观测手册》
分布式
星辰_mya20 分钟前
Es之脑裂
大数据·elasticsearch·搜索引擎
搞科研的小刘选手28 分钟前
【EI稳定检索会议】第七届计算机信息和大数据应用国际学术会议(CIBDA 2026)
大数据·acm·学术会议·计算机工程·计算机信息·大数据应用·信息与技术
成长之路51437 分钟前
【数据集】地级市公共安全基建省内横向压力(2015-2025)
大数据
YangYang9YangYan1 小时前
2026中专大数据专业学习指南
大数据
yumgpkpm1 小时前
预测:2026年大数据软件+AI大模型的发展趋势
大数据·人工智能·算法·zookeeper·kafka·开源·cloudera
无级程序员1 小时前
大数据Hive之拉链表增量取数合并设计(主表加历史表合并成拉链表)
大数据·hive·hadoop
消失的旧时光-19432 小时前
第十六课实战:分布式锁与限流设计 —— 从原理到可跑 Demo
redis·分布式·缓存
若水不如远方2 小时前
分布式一致性(三):共识的黎明——Quorum 机制与 Basic Paxos
分布式·后端·算法
py小王子2 小时前
dy评论数据爬取实战:基于DrissionPage的自动化采集方案
大数据·开发语言·python·毕业设计