首先了解几个阶段

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任务划分相关推荐

  1. spark中stage的划分与宽依赖/窄依赖(转载+自己理解/整理)

    [1]宽依赖和窄依赖,这是Spark计算引擎划分Stage的根源所在,遇到宽依赖,则划分为多个stage,针对每个Stage,提交一个TaskSet: 上图:一张网上的图: (个人笔记,rdd中有多个 ...

  2. spark 源码分析之十九 -- DAG的生成和Stage的划分

    上篇文章 spark 源码分析之十八 -- Spark存储体系剖析 重点剖析了 Spark的存储体系.从本篇文章开始,剖析Spark作业的调度和计算体系. 在说DAG之前,先简单说一下RDD. 对RD ...

  3. spark学习-50-Spark的stage的划分

    1.概述 1.stage的划分主要依据窄依赖和宽依赖 窄依赖: 指父RDD的每一个分区最多被一个子RDD的分区所用,表现为一个父RDD的分区对应于一个子RDD的分区,和两个父RDD的分区对应于一个子R ...

  4. Spark作业调度中stage的划分

    目录 (1)Spark作业调度 (2)RDD依赖关系 (3)Stage的划分 Spark在接收到提交的作业后,会进行RDD依赖分析并划分成多个stage,以stage为单位生成taskset并提交调度 ...

  5. Spark stage如何划分

    窄依赖和宽依赖 窄依赖: 指父RDD的每一个分区最多被一个子RDD的分区所用,表现为一个父RDD的分区对应于一个子RDD的分区,和两个父RDD的分区对应于一个子RDD 的分区.图中,map/filte ...

  6. Spark源码分析之DAGScheduler以及stage的划分

    一 核心属性 TaskScheduler taskScheduler: task调度器 AtomicInteger nextJobId: 获取下一个jobId Int numTotalJobs:job ...

  7. Spark的stage划分算法源码分析

    Spark Application中可以有不同的Action触发多个Job,也就是说一个Application中可以有很多的Job,每个Job是由一个或者多个Stage构成的,后面的Stage依赖于前 ...

  8. spark job stage task概念与区分

    基本概念 Job简单讲就是提交给spark的任务. Stage是每一个job处理过程要分为的几个阶段. Task是每一个job处理过程要分几为几次任务. Task是任务运行的最小单位.最终是要以tas ...

  9. Spark:Stage介绍

    spark job是根据action算子触发的,遇到action算子就会起一个job stage的划分依据就是看是否产生了shuflle(即宽依赖),遇到一个shuffle操作就划分为前后两 个sta ...

最新文章

  1. golang flag简单用法
  2. python加上子类的特性_Python--面向对象三大特性
  3. Java 8 - Lambda从兴趣盎然到索然无味
  4. Linux 下 微擎 的安装使用
  5. [导入]对iis写权限的利用
  6. web service design time table
  7. python设置图片透明度_学习python第40天
  8. IBM云计算架构师:Mesos新功能以及roadmap简介
  9. call指令和ret指令(1001)
  10. loadrunner 操作mysql_loadrunner动态从mysql取值
  11. MYSQL 安装时出现的问题error: Failed dependencies
  12. python中变量名有哪些
  13. DOS远程桌面连接命令
  14. 【最后有彩蛋】Pyhton接口测试手册
  15. Linux C++ 获取文件夹大小2(通过ftw实现)
  16. 大数据分析师与大数据工程师职位,孰轻孰重?(个人角度)
  17. 《人力资源视角下的企业数字化转型》高峰圆桌论坛圆满闭幕
  18. Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day5】 —— 基础篇2
  19. 社团活动报名简要代码
  20. 避免localStorage被更改 让localStorage禁止修改值

热门文章

  1. QIODevice::write函数惹得祸
  2. 矩阵的秩,行列式,代数余子式啥的
  3. 解决Ubuntn安装cal命令
  4. 轻轻挥别2014,悄悄迎来2015
  5. MySQL数据库技术 第二版 章末 答案—单元8
  6. 基于visual Studio2013解决C语言竞赛题之0516人来人往
  7. java搭云梯_java nio为什么是通道(一):通往nio的云梯
  8. STL(标准模板库)理论基础与容器
  9. 我的《高数》复习思维导图
  10. 关于JS中target属性