Spark on YARN是spark运行在yarn上,其中有yarn-client和yarn-cluster两种模式,它们的区别在于Driver运行的结点位置
- yarn-client 模式
yarn-client模式下的spark的Driver运行在客户端,适用于交互、调试,希望立即看到app的输出。 - yarn-cluster 模式
yarn-cluster模式下的spark的Driver运行在Resource Manager(以下简称RM)启动的Applications Manager(以下简称AM)下,这个模式适用于生产环境,本次介绍的任务提交流程也是基于这个模式的。
看一下概念图
- App Submit
首先我们写好的代码经过打包成jar文件,然后通过spark client提交给yarn的RM。RM是yarn的资源管理器,负责调度集群的资源。 - 启动Driver
Spark App被提交到RM后,RM会在集群的一个节点上启动AM以及Driver。 - 申请资源
AM向RM申请资源,提供spark程序所需的资源。 - 返回资源列表
RM向AM返回自己的资源列表。 - 创建执行器对象Executor
为了平衡压力,AM会在集群的其他NodeManager启动Executor,由于在YARN及群中,要实现计算框架可插拔,不会直接在NM创建Executor,要通过Container容器创建执行器Executor。因为NM还要执行其他计算框架的任务,所以抽象了一个Container容器来创建特定的计算框架的任务。 - 反向注册
Executor创建完成后要向Driver注册,告诉Driver Executor已经创建成功。 - 分解任务,调度任务
Driver等待所有Executor创建好后(上图只创建了一个Executor)就会把客户端提交上来的任务进行分解,然后分发到所有的Executor中去。