spark学习之执行计划explain

article/2025/9/29 4:57:04

🐼今天我们来学习阅读spark的执行计划,在学习执行计划之前,我们需要了解spark中的代码是如何执行的,学习代码的执行过程有助于我们加深对spark的理解,对往期内容感兴趣的同学可以查看👇:

  • hadoop专题: hadoop系列文章.
  • spark专题: spark系列文章.
  • flink专题: Flink系列文章.

🐰本文主要是讲解spark sql的代码,从本质上说,操作dataframe和sql,spark都将转换为相同的底层执行计划,那我们这里就以sql代码执行为例。

目录

  • 1. spark代码处理流程
    • 1.1 代码处理详细过程
    • 1.2 核心过程
  • 2. spark查看执行计划
    • 2.1 explain的用法
  • 3. spark阅读执行计划
    • 3.1 阅读 Parsed Logical Plan
    • 3.2 阅读 Analyzed Logical Plan
    • 3.3 阅读 Optimized Logical Plan
    • 3.4 阅读 Physical Plan
  • 4. 总结
  • 5. 参考资料

1. spark代码处理流程

1.1 代码处理详细过程

流程图如下:
在这里插入图片描述

  1. 将sql语句转化为未决断的逻辑执行计划(未决断的意思就是只验证了sql语法的正确性,未验证表名列名的正确性)
  2. 使用catalog验证第一步中的表名列名信息,转化为逻辑执行计划(catalog描述了数据集的属性和数据集的位置)
  3. 接着对我们的sql语法进行优化,得到优化后的逻辑执行计划
  4. 优化后的逻辑执行计划转化为物理执行计划
  5. 根据合适CBO(代价选择)将物理执行计划转化为可以执行的代码
  6. 转化为rdd去执行任务

1.2 核心过程

在这里插入图片描述

  1. 分析
  2. 逻辑优化
  3. 生成物理执行计划
  4. 评估模型分析
  5. 代码生成

2. spark查看执行计划

2.1 explain的用法

下面介绍如何使用explain查询几种执行计划

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

演示一下:我们这里有student表和score表,连接分组操作。

sqlway=spark.sql("""
select student.s_id,count(1)
from student
left join score
on student.s_id=score.s_id
group by student.s_id
""")
sqlway.explain(mode="extended")#展示物理执行计划和逻辑执行计划。

展示逻辑和物理执行计划结果如下:
在这里插入图片描述
图片中的各个部分解释如下:

  1. Unresolved 逻辑执行计划:== Parsed Logical Plan ==
    含义:Parser 组件检查 SQL 语法上是否有问题,然后生成 Unresolved(未决断)的逻辑计划,不检查表名、不检查列名。
  2. Resolved 逻辑执行计划:== Analyzed Logical Plan ==
    含义:通过访问 Spark 中的 Catalog 存储库来解析验证语义、列名、类型、表名等。
  3. 优化后的逻辑执行计划:== Optimized Logical Plan ==
    含义:Catalyst 优化器根据各种规则进行优化。
  4. 物理执行计划:== Physical Plan ==
    含义:生成java代码执行

3. spark阅读执行计划

这一部分将通过第二部分中的代码产生的执行进行解读。
悄悄告诉你们,执行计划的阅读方式是从下往上阅读。

3.1 阅读 Parsed Logical Plan

在这里插入图片描述
这一部分显示的是未决断的逻辑执行计划。从下至上依次是查看表名,然后join,然后聚合。

3.2 阅读 Analyzed Logical Plan

在这里插入图片描述
这一部分,是加入了catalog验证表名和列名之后的执行计划,和上一部分的很像,但增加了表的相关信息,#号代表列的序号,L代表长整型整数。

3.3 阅读 Optimized Logical Plan

在这里插入图片描述
这一部分,是优化后的逻辑执行计划,加入了判断空值、自动过滤等功能,优化了逻辑执行过程。

3.4 阅读 Physical Plan

在这里插入图片描述
这一部分,介绍一些物理执行计划中的名词:

  • HashAggregate:表示数据聚合,一般 HashAggregate 是成对出现,第一个HashAggregate 是将执行节点本地的数据进行局部聚合,另一个 HashAggregate 是将各个分区的数据进一步进行聚合计算。
  • Exchange:表示shuffle,表示需要在集群上移动数据。很多时候HashAggregate 会以 Exchange 分隔开来。
  • Project:表示 SQL 中的投影操作,就是选择列(例如:select name, age…)
  • BroadcastHashJoin:表示通过基于广播方式进行 HashJoin。
  • LocalTableScan :表示全表扫描本地的表。

根据这些,我们可以看出,物理执行计划会去寻找表所在的文件位置,取出所需要的列,规约(预聚合),广播,join的方式,聚合的列等等信息。

4. 总结

在这一部分中,我们对spark sql对运行原理和执行计划进行了说明,学习这一部分的主要原因是让我们更加了解spark的运行机制,为后面我们学习spark的优化做基础。

5. 参考资料

  • 尚硅谷spark3.0
  • spark权威指南

http://chatgpt.dhexx.cn/article/BLMA27co.shtml

相关文章

详解mysql执行计划

在数据库查询的时候,我们通常会使用sql语句去查询自己所需要的数据。但是,关于sql在数据库中是如何执行的,它有没有使用索引,具体使用了哪些索引,查找了哪些字段和表,他们的顺序是怎样的,分别用…

Spark执行计划分析与研究

在学习、使用和研究spark的过程中,逐渐会发现:单纯看官方文档对spark参数调优只能解决一小部分的问题,要想进一步的学习spark,进一步调优甚至在spark源码的基础上二次开发,我觉得收益最高的应该是学习执行计划了。 因…

impala 执行计划详解

Impala是一个MPPMassivelyParallelProcessing计算引擎,简单来说就是将计算压力分到多个节点,得到结果后汇总,然后再返回给客户端。如果你留意过Impala的执行计划,会观察到exchange节点,该节点的作用就是分散计算压力的…

sqlserver 执行计划

一个很好的手册分享,执行计划里的属性解释官方文档:https://docs.microsoft.com/zh-cn/sql/relational-databases/showplan-logical-and-physical-operators-reference?viewsql-server-2017 想复杂的事情简单说,在看执行计划的其他文章的时…

MySQL执行计划

什么是执行计划 The set of operations T that the optimizer o chooses to perform the most efficient query t is called the “query execution plan”, also known as theEXPLAIN plan 如何获取SQL语句的执行计划 方法1: explain SQL 。方法2: …

sql 执行计划

一、各数据库执行计划执行方式 二、explan 三种格式 (以MySQL为例) 1.默认格式 2.tree 格式(与postgreSQL执行计划格式相似) 3.json格式 三、执行计划各字段名含义 1) id:查询编号 ,从小到大,编号越大执行顺序越往前 相同的话从上往下执行(也可以把编号当成缩进的格数…

mysql的执行计划_MySQL——执行计划

项目开发中,性能是我们比较关注的问题,特别是数据库的性能;作为一个开发,经常和SQL语句打交道,想要写出合格的SQL语句,我们需要了解SQL语句在数据库中是如何扫描表、如何使用索引的; MySQL提供explain/desc命令输出执行计划,我们通过执行计划优化SQL语句。 下面我们以M…

Oracle查询执行计划

执行计划(Execution Plan)也叫查询计划(Query Plan),它是数据库执行SQL语句的具体步骤和过程。SQL查询语句的执行计划主要包括: ● 访问表的方式。数据库通过索引或全表扫描等方式访问表中的数据。 ● 多表…

oracle执行计划耗费 基数 字节,Oracle 查看执行计划

一:什么是Oracle执行计划? 执行计划是一条查询语句在Oracle中的执行过程或访问路径的描述 二:怎样查看Oracle执行计划? 这里以PLSQL为例: ①:配置执行计划需要显示的项: 工具 —> 首选项 —> 窗口类型 —> 计划窗口 —> 根据需要配置要显示在执行计…

执行计划绑定方法

执行计划突变属于每个数据库系统不可避免页难以预防的难题,处理执行计划突变带来的性能问题也是每个DBA应该具备的技能。除了开发时针对不同范围的结果集使用不同的sql,DBA可以通过查看索引状态、消除索引碎片、表重新分析,还可以使用执行计划…

PostgreSQL执行计划

简介 PostgreSQL是“世界上最先进的开源关系型数据库”。因为出现较晚,所以客户人群基数较MySQL少,但是发展势头很猛,最大优势是完全开源。 MySQL是“世界上最流行的开源关系型数据库”。当前客户基数大,随着被Oracle收购&#…

一文带你了解SQL的执行计划(explain)

一. 什么是SQL执行计划 为什么关注sql的执行计划,因为一个sql的执行计划可以告诉我们很多关于如何优化sql的信息 。 通过一个sql计划,如何访问中的数据 (是使用全表扫描还是索引查找?) 一个表中可能存在多个表中不同的…

执行计划

一、什么是执行计划(explain plan) 执行计划:一条查询语句在ORACLE中的执行过程或访问路径的描述。 二、如何查看执行计划 1: 在PL/SQL下按F5查看执行计划。第三方工具toad等。 很多人以为PL/SQL的执行计划只能看到基数、优化器、耗费等基本信…

matlab画图基本命令

一、本文主要内容和相关参考博客 参考了xticklabel和xtick在matlab里的区别 和 label ‘ytick’的设置这两个网址。matlab在画图时会自动调整坐标轴间隔的大小,但是我们可以使用如set(gca,ytick,ylabel_pos,yticklabel,ylabel_str)的函数来实现自己调整间隔以画出…

MATLAB常用绘图命令

选择图型窗口命令 坐标轴相关命令 文字标示命令 栅格 离散数据处理

MATLAB画图命令zz

一、散点图 1.1.命令 plot 功能 线性二维图。在线条多于一条时,若用户没有指定使用颜色,则plot循环使用由当前坐标轴颜色顺序属性(current axes ColorOrder property)定义的颜色,以区别不同的…

slice matlab,Matlab画图之slice命令

满意答案 7a6o8yb4 2015.08.12 采纳率:55% 等级:8 已帮助:212人 close all; clc; clear; A = [1 2 2 25 1 3 3 21 1 4 4 20 2 5 5 19 2 6 7 31]; x = A(:, 1); y = A(:, 2); z = A(:, 3); s = A(:, 4); % 提取有效数据 xb = min(x); xe = max(x); yb = min(y); ye = max(…

Matlab画图命令介绍

这是matlab里最基本的命令,帮助那些没有学过matlab,只是用它来画画图的人。

matlab画图句柄

Hf_1figure(color, white);figure全部属性 Alphamap: [0 0.0159 0.0317 0.0476 0.0635 0.0794 … ]BeingDeleted: offBusyAction: queueButtonDownFcn: Children: [00 GraphicsPlaceholder]Clipping: onCloseRequestFcn: closereqColor: [1 1 1]Colormap: [2563 double]Context…

【转载】Matlab画图命令介绍

这是matlab里最基本的命令,帮助那些没有学过matlab,只是用它来画画图的人。