Spark Stage
Spark Stage
什么是Stage
Spark中的一个Stage只不过是物理执行计划其中的一个步骤,它是物理执行计划的一个执行单元。一个Job会被拆分为多组Task,每组任务被称为一个Stage,可以简单理解为MapReduce里面的Map Stage, Reduce Stage。

Spark的Job中Stage之间会有依赖关系。可以利用这些依赖关系把Job所有stage串连起来形成一个有向无环图。在单个job内是根据shuffle算子来拆分stage的,shuffle之前是一个stage,shuffle之后是另一个stage,如果一个job中有多个shuffle,那么每个shuffle之前都是一个stage。一个job被提交运行之后,将会触发stage及其父stage的执行。

窄依赖:
指父RDD的每一个分区最多被一个子RDD的分区所用,表现为一个父RDD的分区对应于一个子RDD的分区,和两个父RDD的分区对应于一个子RDD 的分区。图中,map/filter和union属于第一类,对输入进行协同划分(co-partitioned)的join属于第二类。
宽依赖:
指子RDD的分区依赖于父RDD的所有分区,这是因为shuffle类操作,如图中的groupByKey和未经协同划分的join。

Stage:
一个Job会被拆分为多组Task,每组任务被称为一个Stage就像Map Stage, Reduce Stage。Stage的划分,简单的说是以ShuffleMapStage 和ResultStage 这两种类型来划分。
在Spark中有两类task,一类是shuffleMapTask,一类是resultTask,第一类task的输出是shuffle所需数据,第二类task的输出是result,stage的划分也以此为依据,shuffle之前的所有变换是一个stage,shuffle之后的操作是另一个stage。
比如 rdd.parallize(1 to 10).foreach(println) 这个操作没有shuffle,直接就输出了,那么只有它的task是resultTask,stage也只有一个;
如果是rdd.map(x => (x, 1)).reduceByKey(_ + _).foreach(println), 这个job因为有reduce,所以有一个shuffle过程,那么reduceByKey之前的是一个stage,执行shuffleMapTask,输出shuffle所需的数据,reduceByKey到最后是一个stage,直接就输出结果了。
如果job中有多次shuffle,那么每个shuffle之前都是一个stage。
Spark会根据RDD之间的依赖关系将DAG图划分为不同的阶段,对于窄依赖,由于partition依赖关系的确定性,partition的转换处理就可以在同一个线程里完成,窄依赖就被spark划分到同一个stage中,而对于宽依赖,只能等父RDD shuffle处理完成后,下一个stage才能开始接下来的计算。之所以称之为ShuffleMapTask是因为它需要将自己的计算结果通过shuffle到下一个stage中。
Spark Stage的分类
在Spark中,Stage可以分成两种类型。分别是:
- ShuffleMapStage
- 这种Stage是以Shuffle为输出边界
- 其输入边界可以是从外部获取数据,也可以是另一个ShuffleMapStage的输出
- 其输出可以是另一个Stage的开始
- ShuffleMapStage的最后Task就是ShuffleMapTask
- 在一个Job里可能有该类型的Stage,也可以能没有该类型Stage
- ResultStage
- 这种Stage是直接输出结果
- 其输入边界可以是从外部获取数据,也可以是另一个ShuffleMapStage的输出
- ResultStage的最后Task就是ResultTask
- 在一个Job里必定有该类型Stage
Stage类的定义
Stage类是一个抽象类,类的定义如下:
abstract class Stage { def findMissingPartitions(): Seq[Int]}
相关文章:
Spark Stage
Spark Stage 什么是Stage Spark中的一个Stage只不过是物理执行计划其中的一个步骤,它是物理执行计划的一个执行单元。一个Job会被拆分为多组Task,每组任务被称为一个Stage,可以简单理解为MapReduce里面的Map Stage, Reduce Stag…...
【国家计算机二级考试C语言.2024】学习备忘录
说明 分值 4060100 40分: 这里面有一大堆程序结果选这题,如果手速还可以。那遇到有疑问的情况就自己去倒计算器的ad E上面去打一打。能够跑出来,结果那是100%的没问题。 有些概念题比较讨厌,只能自己去记忆了。要去背诵熟熟的。…...
十分钟掌握redis精髓指令
编译安装 git clone https://gitee.com/mirrors/redis.git cd redis make make test make install # 默认安装在 /usr/local/bin # redis-server 是服务端程序 # redis-cli 是客户端程序启动 mkdir redis-data # 把redis文件夹下 redis.conf 拷贝到 redis-data # 修改 redis.…...
突然断电导致git损坏修复
背景 使用ide开发时突然断电启动后所有文件都成了没有提交的文件。打开git视图日志也消失不见 # git命令执行结果如下 git status No commits yetChanges to be committed:(use "git rm --cached <file>..." to unstage)new file: .github/FUNDING.ymlnew …...
MATLAB入门指南:从零开始进行数学建模竞赛
第1部分:认识MATLAB 1.1 什么是MATLAB? MATLAB(Matrix Laboratory的缩写)是一个高性能的数值计算环境和第四代编程语言。由MathWorks公司开发,它提供了一个便捷的数学解决框架,主要用于算法开发、数据可视…...
【JavaEE初阶系列】——带你了解volatile关键字以及wait()和notify()两方法背后的原理
目录 🚩volatile关键字 🎈volatile 不保证原子性 🎈synchronized 也能保证内存可见性 🎈Volatile与Synchronized比较 🚩wait和notify 🎈wait()方法 💻wait(参数)方法 🎈noti…...
GitHub配置SSH Key(详细版本)
GitHub配置SSH Key的目的是为了帮助我们在通过git提交代码是,不需要繁琐的验证过程,简化操作流程。比如新建的仓库可以下载, 但是提交需要账号密码。 步骤 一、设置git的user name和email 如果你是第一次使用,或者还没有配置过的话需要操作…...
JavaScript 权威指南第七版(GPT 重译)(六)
第十五章:JavaScript 在 Web 浏览器中 JavaScript 语言是在 1994 年创建的,旨在使 Web 浏览器显示的文档具有动态行为。自那时以来,该语言已经发生了显著的演变,与此同时,Web 平台的范围和功能也迅速增长。今天&#…...
Learning to summarize from human feedback
Abstract 人工参考总结以及 ROUGE 指标只是我们真实关心的目标(总结质量)的粗略代表。通过优化人工偏好来显著提升总结质量使用大量高质量的人类比较来训练一个模型来预测人类偏好的总结使用这个模型作为奖励函数对总结策略进行强化学习微调我们模型的效果在 TL;DR 数据集上显…...
数据库迁移测试
数据迁移测试 在进行项目重构或者更新的时候或多或少会对数据库进行变更,为了保证业务的稳定性对数据进行迁移测试是很有必要的,因为数据就是业务的基石,没有数据业务都是空中楼阁,形同虚设,小编结合近期的工作对数据…...
ASP .Net Core ILogger日志服务
🐳简介 ILogger日志服务是.NET平台中的一个内置服务,主要用于应用程序的日志记录。它提供了灵活的日志记录机制,允许开发者在应用程序中轻松地添加日志功能。以下是其主要特点和组件: ILogger接口:这是ILogger日志服…...
LeetCode 2657.找到两个数组的前缀公共数组
给你两个下标从 0 开始长度为 n 的整数排列 A 和 B 。 A 和 B 的 前缀公共数组 定义为数组 C ,其中 C[i] 是数组 A 和 B 到下标为 i 之前公共元素的数目。 请你返回 A 和 B 的 前缀公共数组 。 如果一个长度为 n 的数组包含 1 到 n 的元素恰好一次,我…...
【jvm】jinfo使用
jinfo介绍 jinfo 是一个命令行工具,用于查看和修改 Java 虚拟机(JVM)的配置参数。它通常用于调试和性能调优。 使用 jinfo 命令,你可以查看当前 JVM 的配置参数,包括堆大小、线程数、垃圾回收器类型等。此外…...
C++ Thread 源码 观后 自我感悟 整理
Thread的主要数据成员为_Thr 里面存储的是线程句柄和线程ID 先看看赋值运算符的移动构造 最开始判断线程的ID是否不为0 _STD就是使用std的域 如果线程ID不为0,那么就抛出异常 这里_New_val使用了完美转发,交换_Val和_New_val的值 _Thr _STD exchange(_…...
2024阿里云2核2G服务器租用价格99元和61元一年
阿里云2核2G服务器配置优惠价格61元一年和99元一年,61元是轻量应用服务器2核2G3M带宽、50G高效云盘;99元服务器是ECS云服务器经济型e实例ecs.e-c1m1.large,2核2G、3M固定带宽、40G ESSD entry系统盘,阿里云活动链接 aliyunfuwuqi.…...
刚刚!奥特曼剧透GPT-5,将在高级推理功能上实现重大进步
奥特曼:“GPT-5的能力提升幅度将超乎人们的想象…” 自 Claude 3 发布以来,外界对 GPT-5 的期待越来越强。毕竟Claude 3已经全面超越了 GPT-4,成为迄今为止最强大模型。 而且距离 GPT-4 发布已经过去了整整一年时间,2023年3月14…...
uniapp使用Canvas给图片加水印把临时文件上传到服务器
生成的临时路径是没有完整的路径没办法上传到服务器 16:37:40.993 添加水印后的路径, _doc/uniapp_temp_1710923708347/canvas/17109238597881.png 16:37:41.041 添加水印后的完整路径, file://storage/emulated/0/Android/data/com.jingruan.zjd/apps/__UNI__BE4B000/doc/…...
小希的迷宫
目录 描述 输入 输出 样例输入 样例~~输出~~ 思路 code 描述 Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走。但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的&…...
MySQL索引剖析【了解背后的数据结构】
文章目录 常用索引概念聚簇索引 🎉非聚簇索引(二级索引) 数据结构选择Hash结构 ⭐️有序数组二叉搜索树AVL树(平衡二叉搜索树)B-Tree(多路平衡查找树)BTree ⭐️ MySQL中索引的实现InnoDB 索引实…...
004——内存映射(基于鸿蒙和I.MAX6ULL)
目录 一、 ARM架构内存映射模型 1.1 页表项 1.2 一级页表映射过程 1.3 二级页表映射过程 1.4 cache 和 buffer 二、 鸿蒙内存映射代码学习 三、 为板子编写内存映射代码 3.1 内存地址范围 3.2 设备地址范围 一、 ARM架构内存映射模型 (以前我以为页表机制…...
STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...
面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
PostgreSQL——环境搭建
一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在࿰…...
阿里云Ubuntu 22.04 64位搭建Flask流程(亲测)
cd /home 进入home盘 安装虚拟环境: 1、安装virtualenv pip install virtualenv 2.创建新的虚拟环境: virtualenv myenv 3、激活虚拟环境(激活环境可以在当前环境下安装包) source myenv/bin/activate 此时,终端…...
怎么开发一个网络协议模块(C语言框架)之(六) ——通用对象池总结(核心)
+---------------------------+ | operEntryTbl[] | ← 操作对象池 (对象数组) +---------------------------+ | 0 | 1 | 2 | ... | N-1 | +---------------------------+↓ 初始化时全部加入 +------------------------+ +-------------------------+ | …...
ArcPy扩展模块的使用(3)
管理工程项目 arcpy.mp模块允许用户管理布局、地图、报表、文件夹连接、视图等工程项目。例如,可以更新、修复或替换图层数据源,修改图层的符号系统,甚至自动在线执行共享要托管在组织中的工程项。 以下代码展示了如何更新图层的数据源&…...
手动给中文分词和 直接用神经网络RNN做有什么区别
手动分词和基于神经网络(如 RNN)的自动分词在原理、实现方式和效果上有显著差异,以下是核心对比: 1. 实现原理对比 对比维度手动分词(规则 / 词典驱动)神经网络 RNN 分词(数据驱动)…...
