spark job, stage ,task介绍

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) 来指定。

    原文作者:凉意先生
    原文地址: https://www.jianshu.com/p/014cb82f462a
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞