spark job, stage ,task介绍。

时间:2024-01-11 13:01:20

1. spark 如何执行程序?

首先看下spark 的部署图:

spark job, stage ,task介绍。

节点类型有:

1. master 节点: 常驻master进程,负责管理全部worker节点。

2. worker 节点: 常驻worker进程,负责管理executor 并与master节点通信。

dirvier:官方解释为: The process running the main() function of the application and creating the SparkContext。即理解为用户自己编写的应用程序

Executor:执行器:

  在每个WorkerNode上为某应用启动的一个进程,该进程负责运行任务,并且负责将数据存在内存或者磁盘上,每个任务都有各自独立的Executor。

  Executor是一个执行Task的容器。它的主要职责是:

  1、初始化程序要执行的上下文SparkEnv,解决应用程序需要运行时的jar包的依赖,加载类。

  2、同时还有一个ExecutorBackend向cluster manager汇报当前的任务状态,这一方面有点类似hadoop的tasktracker和task。

  总结:Executor是一个应用程序运行的监控和执行容器。Executor的数目可以在submit时,由 --num-executors (on yarn)指定.

Job:

  

  包含很多task的并行计算,可以认为是Spark RDD 里面的action,每个action的计算会生成一个job。

  用户提交的Job会提交给DAGScheduler,Job会被分解成Stage和Task。

Stage:

  

  一个Job会被拆分为多组Task,每组任务被称为一个Stage就像Map Stage, Reduce Stage

  Stage的划分在RDD的论文中有详细的介绍,简单的说是以shuffle和result这两种类型来划分。在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。

Task

  即 stage 下的一个任务执行单元,一般来说,一个 rdd 有多少个 partition,就会有多少个 task,因为每一个 task 只是处理一个 partition 上的数据.

  每个executor执行的task的数目, 可以由submit时,--num-executors(on yarn) 来指定。