Spark的Stage任务划分
首先了解几个阶段
Spark集群
- 一个spark集群可以并发运行多个spark应用。
Spark应用
- 一个spark应用由一个driver(写逻辑代码)和多个executor线程组成。spark程序在driver端执行,发送指令到executor所在节点。
- 当启动sparkContext的时候,一个driver就被启动了,同时多个executor也被启动。executor不能跨节点,但是一个节点可以有多个executor。RDD会跨越多个executor进行并行计算,一个executor可以处理RDD多个分区的数据,但是一个分区的数据不能被多个executor执行。
- 一个spark应用可以并发运行多个job,触发一次action算子就是一次job。
Job
- spark RDD是懒执行,触发一次action,切分一个job。
- 一个job可以有多个阶段(stage)。
stage
- 一个宽依赖切分一个stage。
- stage的数量 = 宽依赖数量 + 1。
- 一个stage有多个task。
task
- task的数量 = 每个阶段最后一个RDD的分区数量。
通过web UI查看各阶段之间的关系
val conf: SparkConf = new SparkConf().setAppName(this.getClass.getName).setMaster("local[*]")val sc = new SparkContext(conf)val rdd: RDD[Int] = sc.makeRDD(List(1,3,4,5,1,3,9), 2)val resRDD: RDD[(Int, Int)] = rdd.map((_,1)).reduceByKey(_+_)// 第一次actionresRDD.foreach(println)// 第二次actionresRDD.saveAsTextFile("D:\\develop\\workspace\\bigdata2021\\spark2021\\out")Thread.sleep(100000000)sc.stop()
查看job的数量(每一个action触发一次job)
查看job0的stage数量(每触发一次宽依赖增加一次stage的数量)
查看task的数量(每个stage最后阶段的RDD分区数)
如果存在shuffle过程
- 系统自动对shuffle之前的过程进行缓存,在web页面显示skipped。
Stage任务划分
首先生成DAG有向无环图,通过点和线组成的拓扑图形,该图形具有方向,不会形成闭环。
原始的RDD经过一系列的转换就形成了DAG,根据RDD之间的宽依赖关系将DAG分为不同的Stage。
DAG记录了RDD的转换过程和任务的阶段。
RDD任务切分中间过程分别为:Application-> job->stage->task.
启动sparkContext时就启动了Application。
一个action算子生成一个job。
每个job根据宽依赖切分为不同的stage。
每个stage最终RDD分区的数量就是task的数量。
Spark的Stage任务划分相关推荐
- spark中stage的划分与宽依赖/窄依赖(转载+自己理解/整理)
[1]宽依赖和窄依赖,这是Spark计算引擎划分Stage的根源所在,遇到宽依赖,则划分为多个stage,针对每个Stage,提交一个TaskSet: 上图:一张网上的图: (个人笔记,rdd中有多个 ...
- spark 源码分析之十九 -- DAG的生成和Stage的划分
上篇文章 spark 源码分析之十八 -- Spark存储体系剖析 重点剖析了 Spark的存储体系.从本篇文章开始,剖析Spark作业的调度和计算体系. 在说DAG之前,先简单说一下RDD. 对RD ...
- spark学习-50-Spark的stage的划分
1.概述 1.stage的划分主要依据窄依赖和宽依赖 窄依赖: 指父RDD的每一个分区最多被一个子RDD的分区所用,表现为一个父RDD的分区对应于一个子RDD的分区,和两个父RDD的分区对应于一个子R ...
- Spark作业调度中stage的划分
目录 (1)Spark作业调度 (2)RDD依赖关系 (3)Stage的划分 Spark在接收到提交的作业后,会进行RDD依赖分析并划分成多个stage,以stage为单位生成taskset并提交调度 ...
- Spark stage如何划分
窄依赖和宽依赖 窄依赖: 指父RDD的每一个分区最多被一个子RDD的分区所用,表现为一个父RDD的分区对应于一个子RDD的分区,和两个父RDD的分区对应于一个子RDD 的分区.图中,map/filte ...
- Spark源码分析之DAGScheduler以及stage的划分
一 核心属性 TaskScheduler taskScheduler: task调度器 AtomicInteger nextJobId: 获取下一个jobId Int numTotalJobs:job ...
- Spark的stage划分算法源码分析
Spark Application中可以有不同的Action触发多个Job,也就是说一个Application中可以有很多的Job,每个Job是由一个或者多个Stage构成的,后面的Stage依赖于前 ...
- spark job stage task概念与区分
基本概念 Job简单讲就是提交给spark的任务. Stage是每一个job处理过程要分为的几个阶段. Task是每一个job处理过程要分几为几次任务. Task是任务运行的最小单位.最终是要以tas ...
- Spark:Stage介绍
spark job是根据action算子触发的,遇到action算子就会起一个job stage的划分依据就是看是否产生了shuflle(即宽依赖),遇到一个shuffle操作就划分为前后两 个sta ...
最新文章
- golang flag简单用法
- python加上子类的特性_Python--面向对象三大特性
- Java 8 - Lambda从兴趣盎然到索然无味
- Linux 下 微擎 的安装使用
- [导入]对iis写权限的利用
- web service design time table
- python设置图片透明度_学习python第40天
- IBM云计算架构师:Mesos新功能以及roadmap简介
- call指令和ret指令(1001)
- loadrunner 操作mysql_loadrunner动态从mysql取值
- MYSQL 安装时出现的问题error: Failed dependencies
- python中变量名有哪些
- DOS远程桌面连接命令
- 【最后有彩蛋】Pyhton接口测试手册
- Linux C++ 获取文件夹大小2(通过ftw实现)
- 大数据分析师与大数据工程师职位,孰轻孰重?(个人角度)
- 《人力资源视角下的企业数字化转型》高峰圆桌论坛圆满闭幕
- Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day5】 —— 基础篇2
- 社团活动报名简要代码
- 避免localStorage被更改 让localStorage禁止修改值