当前位置: 首页 > news >正文

Spark执行计划解析后是如何触发执行的?

在前一篇Spark SQL 执行计划解析源码分析中,笔者分析了Spark SQL 执行计划的解析,很多文章甚至Spark相关的书籍在讲完执行计划解析之后就开始进入讲解Stage切分和调度Task执行,每个概念之间没有强烈的关联,因此这中间总感觉少了点什么,执行计划是如何触发执行的?是Spark自动触发的?还是由客户端的代码触发的?本文笔者为了解答这几个疑问,尝试进行了相关代码的分析。

物理计划都是继承自SparkPlan类,在研究如何触发执行计划之前我们来看一下最终的物理计划是实现逻辑是怎么样的,这里以SparkPlan的子类FileSourceScanExec作为列子来分析一下:
FileSourceScanExec
在非Columnar的模式下,普通的算子执行都是以重写doExecute方法来实现的,FileSourceScanExec同样也不例外,下面是FileSourceScanExec的doExecute方法:
doExecute
在这里插入图片描述

我们可以看到doExecute方法的返回值是RDD[InternalRow], 这也是单个物理计划Node转化成RDD关键一步。到这里我们搞清楚了SparkPlan底层是依赖于RDD实现具体的逻辑,那么接下来我们分析一下Spark是如何将一个一个物理计划节点转换成一个一个RDD的。

首先Spark执行模型是火山模型(又叫迭代器模型),通过迭代器模型,Spark会先调用execute方法,execute方法会调用每个Node的doExecute,而从上面的分析我们可以得知每一个doExecute方法的返回类型都是RDD,因为就把每个单独的Node给串联起来了,具体的代码在SparkPlan.execute。
在这里插入图片描述
下面是一个简单查询对应的物理计划转换成RDD的大致逻辑:
在这里插入图片描述
到这里我们知道知道了多个物理计划Node会转换成多个RDD,而触发这个转换的则是下面的代码,调用了executedPlan.execute(),也就是触发executedPlan转换成RDD。在这里插入图片描述
后续的逻辑就是以RDD来进行的,那么RDD又是如何计算的呢?我们知道RDD分为Transformation和Action两种类型的操作,而Transformation是惰性的,只有Action会触发计算,因此只有Action被调用的时候,RDD才会触发计算,对应的Spark的执行计划才会开始触发具体的逻辑执行。Action算子有很多中,我们可以以常见的show、take等作为入口去分析源码,被调用的地方大部分都在DataSet里面,可以一一对应地查看。

以上的逻辑仅仅是分析Spark地物理计划是如何触发执行的,还没到切分Stage以及调度Task的阶段。从这一部分的源码分析,我们可以清楚的了解到Spark的物理计划是被火山模型如何串联起来的,以及底层的RDD是如何把一一对应的,这对于理解每一个物理执行计划的Node至关重要。无论是SQL还是PySpark等DataFrame操作,最终都会转换成RDD的逻辑。

题外话:笔者之前都是一直只是知道Spark中RDD的概念,但是并没有很深刻的理解RDD的一个重要性,通过本文的分析,才清楚的认识到RDD在Spark当中扮演着如此重要的角色。

相关文章:

Spark执行计划解析后是如何触发执行的?

在前一篇Spark SQL 执行计划解析源码分析中,笔者分析了Spark SQL 执行计划的解析,很多文章甚至Spark相关的书籍在讲完执行计划解析之后就开始进入讲解Stage切分和调度Task执行,每个概念之间没有强烈的关联,因此这中间总感觉少了点…...

B4X编程语言:B4X控件方法汇总

1、AddNode、AddView方法 AddNode(Node As javafx.scence.Node,Left As Double,Top As Double,Width As Double,Height As Double) B4J控件 AddView(View As javafx.scence.Node,Left As Double,Top As Double,Width As Double,Height As Double) B4J的B4XView …...

基于XML配置Bean和基于XML自动装配

目录 基于XML配置Bean id分配规则 通过id获取bean 通过类型获取bean 通过C命名空间配置bean 使用C命名空间 通过P命名空间配置bean 通过util:list进行配置bean 指定id,直接ref引用过来 通过外部属性文件配置Bean Bean信息重用(继承)…...

全排列 dfs

给定一个由不同的小写字母组成的字符串&#xff0c;输出这个字符串的所有全排列。 我们假设对于小写字母有 a<b<…<y<z &#xff0c;而且给定的字符串中的字母已经按照从小到大的顺序排列。 输入格式 输入只有一行&#xff0c;是一个由不同的小写字母组成的字符串…...

linux内存相关命令的尝试

文章目录 前言freeMem 部分的解释Swap 部分的解释 vmstatProcs (进程)Memory (内存)Swap (交换)IO (磁盘 I/O)System (系统)CPU (处理器) pidstat标题行解释数据列解释 sar字段含义解释示例分析 总结 前言 菜就多练&#xff0c;昨天看了一篇有关剖析 RocksDB 内存超限问题的文…...

Vue2 基础

Vue 2 是 Vue.js 的第二个主要版本&#xff0c;于 2016 年发布。它是一个渐进式的 JavaScript 框架&#xff0c;以其简单、灵活、易用性高而广受欢迎。Vue 2 主要专注于构建用户界面&#xff08;UI&#xff09;&#xff0c;并且非常适合用于构建单页应用&#xff08;SPA&#x…...

递归问题(c++)

递归设计思路 数列递归 : 如果一个数列的项与项之间存在关联性&#xff0c;那么可以使用递归实现 ; 原理 : 如果一个函数可以求A(n)&#xff0c;那么该函数就可以求A(n-1)&#xff0c;就形成了递归调用 ; 注意: 一般起始项是不需要求解的&#xff0c;是已知条件 这就是一个典型…...

系统思考—战略决策

别用管理上的勤奋&#xff0c;来掩盖经营上的懒惰。 日本一家物业公司&#xff0c;因经营不善&#xff0c;面临生死存亡的危机。老板为了扭转局面&#xff0c;采取了很多管理手段——提高员工积极性&#xff0c;推行业绩与绩效挂钩&#xff0c;实施各种考核制度。然而&#xf…...

wxwidgets xml插入图片的两种方案

wxwidgets xml插入图片的两种方案: 1.使用wxWidgets中的wxRichTextCtrl插入图片,将wxRichTextCtrl的buffer导出为xml文件 参考richtextctrl例子 if (wxTheClipboard->IsSupported(wxDF_BITMAP)){wxBitmapDataObject data;wxTheClipboard->GetData(data);wxBitmap bi…...

大模型呼入机器人如何赋能呼叫中心?(转)

大模型呼入机器人如何赋能呼叫中心&#xff1f;(转) 原作者&#xff1a;开源呼叫中心FreeIPCC 大模型呼入机器人在赋能呼叫中心方面发挥着重要作用&#xff0c;主要体现在以下几个方面&#xff1a; 一、提升服务效率与质量 24小时不间断服务&#xff1a; 大模型呼入机器人能…...

linux下socket本地套接字通讯

使用套接字除了可以实现网络间不同主机间的通信外&#xff0c;还可以实现同一主机的不同进程间的通信&#xff0c;且建立的通信是双向的通信。socket进程通信与网络通信使用的是统一套接口&#xff0c;只是地址结构与某些参数不同。 用途 进程间通信&#xff1a;本地套…...

NDRCContextUnmarshall断点函数分析之I_RpcBindingCopy函数的作用

NDRCContextUnmarshall断点函数分析之I_RpcBindingCopy函数的作用 第一部分&#xff1a; void RPC_ENTRY NDRCContextUnmarshall ( // process returned context OUT NDR_CCONTEXT PAPI *phCContext,// stub context to update IN RPC_BINDING_HANDLE hRPC, …...

WebView2教程(基于C++)【一】环境初始化

创建一个VisualStudio C项目&#xff0c;通过NuGet包管理器安装两个包&#xff1a; 注意&#xff0c;在项目属性页设置项目使用&#xff1a;C 20&#xff0c;子系统设置成窗口&#xff08;相应的预处理器也要改变&#xff09;&#xff0c;DPI识别设置成每个监视器高DPI识别。 …...

go语言中context的用法

0 概述 Context 是 Go 语言中非常重要的一个概念&#xff0c;它主要用于跨多个函数或 goroutine 传递 取消信号、超时控制、截止时间 和 请求范围数据。在并发编程中&#xff0c;Context 提供了更好的控制和管理&#xff0c;尤其是当你需要在多个 goroutine 之间传递状态或进行…...

概括网络给社会生活带来的种种影响

题目 【2002年国考申论】给定资料反映了网络给社会生活带来的种种影响&#xff0c;用不超过200字对这些影响进行概括。 要求&#xff1a;全面&#xff0c;有条理&#xff0c;有层次。(20分) 审题 特定事实&#xff1a;网络给社会生活带来的种种影响基本题型&#xff1a;单一…...

OpenCV相机标定与3D重建(16)将点从齐次坐标转换为非齐次坐标函数convertPointsFromHomogeneous()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::convertPointsFromHomogeneous 是 OpenCV 库中的一个函数&#xff0c;用于将点从齐次坐标&#xff08;homogeneous coordinates&#xff09;…...

Jmeter如何对UDP协议进行测试?

Jmeter如何对UDP协议进行测试&#xff1f; 1 jmeter-plugins安装2 UDP-Protocol Support安装3 UDP协议测试 1 jmeter-plugins安装 jmeter-plugins是Jmeter的插件管理器&#xff1b;可以组织和管理Jmeter的所有插件&#xff1b;直接进入到如下页面&#xff0c;选择如图的选项进…...

Unix 传奇 | 谁写了 Linux | Unix birthmark

注&#xff1a;本文为 “左耳听风”陈皓的 unix 相关文章合辑。 皓侠已走远&#xff0c;文章有点“年头”&#xff0c;但值得一阅。 文中部分超链已沉寂。 Unix 传奇 (上篇) 2010 年 04 月 09 日 陈皓 了解过去&#xff0c;我们才能知其然&#xff0c;更知所以然。总结过去…...

【网络】传输层协议UDP/TCP网络层IP数据链路层MACNAT详解

主页&#xff1a;醋溜马桶圈-CSDN博客 专栏&#xff1a;计算机网络原理_醋溜马桶圈的博客-CSDN博客 gitee&#xff1a;mnxcc (mnxcc) - Gitee.com 目录 1.传输层协议 UDP 1.1 传输层 1.2 端口号 1.3 UDP 协议 1.3.1 UDP 协议端格式 1.3.2 UDP 的特点 1.3.3 面向数据报 1…...

RTMP推流平台EasyDSS在无人机推流直播安防监控中的创新应用

无人机与低空经济的关系密切&#xff0c;并且正在快速发展。2024年中国低空经济行业市场规模达到5800亿元&#xff0c;其中低空制造产业占整个低空经济产业的88%。预计未来五年复合增速将达到16.03%。 随着科技的飞速发展&#xff0c;公共安防关乎每一个市民的生命财产安全。在…...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

第7篇:中间件全链路监控与 SQL 性能分析实践

7.1 章节导读 在构建数据库中间件的过程中&#xff0c;可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中&#xff0c;必须做到&#xff1a; &#x1f50d; 追踪每一条 SQL 的生命周期&#xff08;从入口到数据库执行&#xff09;&#…...

CMS内容管理系统的设计与实现:多站点模式的实现

在一套内容管理系统中&#xff0c;其实有很多站点&#xff0c;比如企业门户网站&#xff0c;产品手册&#xff0c;知识帮助手册等&#xff0c;因此会需要多个站点&#xff0c;甚至PC、mobile、ipad各有一个站点。 每个站点关联的有站点所在目录及所属的域名。 一、站点表设计…...

Python爬虫(四):PyQuery 框架

PyQuery 框架详解与对比 BeautifulSoup 第一部分&#xff1a;PyQuery 框架介绍 1. PyQuery 是什么&#xff1f; PyQuery 是一个 Python 的 HTML/XML 解析库&#xff0c;它采用了 jQuery 的语法风格&#xff0c;让开发者能够用类似前端 jQuery 的方式处理文档解析。它的核心特…...