Spark On Yarn的两种模式解析

使用yarn能对spark的运行资源调动进行动态划分,spark on yarn有yarn-client和yarn-cluster两种模式。这两种模式的作业虽然都运行在yarn上,但是运行方式不一样;下面解析一下这两种模式下提交作业到运行的全过程。

运行中涉及到的名词

  1. Application: Appliction都是指用户编写的Spark应用程序,其中包括一个Driver功能的代码和分布在集群中多个节点上运行的Executor代码
  2. Driver: Spark中的Driver即运行上述Application的main函数并创建SparkContext,创建- SparkContext的目的是为了准备Spark应用程序的运行环境,当Executor部分运行完毕后,Driver同时负责将SparkContext关闭,通常用SparkContext代表Driver
  3. AppMaster: 控制yarn app运行和任务资源
  4. Executor: 某个Application运行在worker节点上的一个进程, 该进程负责运行某些Task, 并且负责将数据存到内存或磁盘上,每个Application都有各自独立的一批Executor
  5. Worker: 集群中任何可以运行Application代码的节点,在Standalone模式中指的是通过slave文件配置的Worker节点,在Spark on Yarn模式下就是NodeManager节点
  6. Task: 被送到某个Executor上的工作单元,但hadoopMR中的MapTask和ReduceTask概念一样,是运行Application的基本单位,多个Task组成一个Stage,而Task的调度和管理等是由TaskScheduler负责
  7. Job: 包含多个Task组成的并行计算,往往由Spark Action触发生成, 一个Application中往往会产生多个Job
  8. Stage: 每个Job会被拆分成多组Task, 作为一个TaskSet, 其名称为Stage,Stage的划分和调度是有DAGScheduler来负责的,Stage有非最终的Stage(Shuffle Map Stage)和最终的Stage(Result Stage)两种,Stage的边界就是发生shuffle的地方
  9. DAGScheduler: 根据Job构建基于Stage的DAG(Directed Acyclic Graph有向无环图),并提交Stage给TASkScheduler。 其划分Stage的依据是RDD之间的依赖的关系找出开销最小的调度方法
  10. TASKSedulter: 将TaskSet提交给worker运行,每个Executor运行什么Task就是在此处分配的. TaskScheduler维护所有TaskSet,当Executor向Driver发生心跳时,TaskScheduler会根据资源剩余情况分配相应的Task。另外TaskScheduler还维护着所有Task的运行标签,重试失败的Task

运行中涉及到的流程

以下内容为以上部分名词串连起来的一些基本流程的概念,该部分作为spark使用者的科普知识。
一个spark action会触发多个job,现在以一个job为例串通全流程:
一次spark action触发多个job 一个job由DAGScheduler划分为多个taskSet,也就形成了下图中关联的stage taskSet再由TaskScheduler分配到各个woker worker再下发到各个executor去执行任务
Spark On Yarn的两种模式解析_第1张图片

注意事项

在介绍yarn client 和yarn cluster前有必要再次强调一下driver和AppMaster的关系,后面流程的差异会由这两个概念体现。这是两个完全不同的概念,driver控制spark计算和分配使用任务资源、AppMaster控制yarn app和申请或释放任务资源,换言之只有基于yarn资源的spark引擎这两个概念才有交叉(stand alone下的spark资源均为driver负责)。

yarn-client任务执行流程

yarn client模式起任务的流程可以参考下图,流程细节如下:

  1. driver机器位于client机器上,初始化spark context后向ResourceManager申请第一个container资源为AppMaster作准备
  2. 启动AppMaster
  3. AppMaster向ResourceManager申请任务执行的container
  4. 启动executor执行任务
  5. 位于client端的driver机器保持与executor任务通信

可以看到yarn client模式能让用户与yarn集群有较好的交互性,但是client机器需要与各个executor所在的机器有较多交互网络带宽消耗较高。顺带提一下:如果client机器与executor所在的机器跨网断则yarn client模式的运行时延完全由网络时延决定。
Spark On Yarn的两种模式解析_第2张图片

yarn-cluster任务执行流程

yarn cluster模式起任务的流程可以参考下图,流程细节如下:

  1. client机器首先向ResourceManager申请AppMaster资源为启动AppMaster作准备
  2. 启动AppMaster资源,在同样的container中通过反射机器启动driver初始化SparkContext
  3. AppMaster向ResourceManager申请任务执行的container
  4. 启动executor执行任务

Spark On Yarn的两种模式解析_第3张图片

你可能感兴趣的:(spark)