文章目录
- 前言
- (一)Spark On Yarn集群的Client模式运行流程
- (二) Spark On Yarn集群的Cluster模式运行流程
- 总结
前言
#博学谷IT学习技术支持#
上篇文章有讨论到Spark On Yarn的两种部署模式,如果有不清楚的地方,可以再看看,附上对应文章的链接:Spark的部署模式,本篇文章主要讨论Spark On Yarn两种部署模式的运行流程。
(一)Spark On Yarn集群的Client模式运行流程
该模式的Driver程序在本地Client端运行;
- 大致流程:先在提交任务的节点上启动Driver程序,然后向Yarn集群申请运行资源,申请到运行资源后开始执行任务;
- 详细流程如下:
(1)在提交任务的节点上启动Driver程序,执行Main函数,创建SparkContext对象
(2)Driver程序启动成功后,向ResourceManager申请启动ApplicationMaster
(3)ResourceManager接收到请求后,在适当的一台NodeManager节点启动ApplicationMaster
(4)ApplicationMaster启动成功后与Driver程序上的SparkContext对象通信,并根据SparkContext提供的任务信息向ResourceManager申请任务执行所需的资源,以执行Executor
(5)ResourceManager接收到资源请求后,根据资源调度机制以Container的形式返回给ApplicationMaster
(6)ApplicationMaster拿着从ResourceManager节点分配到的Container资源信息,向NodeManger节点申请对应的资源,以启动运行Executor
(7)Executor启动成功后,反向通知Driver,当所有的Executor都启动成功后,Driver开始执行代码部分的逻辑
(8)Driver先加载代码中与RDD相关的所有算子,并根据算子的依赖关系形成DAG有向无环图,然后划分Stage并进行任务分配,通知Executor执行相关任务
(9)Executor接收并执行完任务后,将运行结果反馈给Driver
(10)当Driver接收到所有Executor的执行完成信号后,认为任务已经执行完成,与此同时ResourceManager也会接收到ApplicationMaster返回的任务完成情况,ResourceManager开始回收资源,关闭ApplicationMaster,并通知Driver程序
(11)Driver还会执行后续与算子无关的代码,代码执行完成后,整个流程就完成了
(二) Spark On Yarn集群的Cluster模式运行流程
该模式下,Driver程序就是Yarn集群的ApplicationMaster,二者合一,Driver程序的任务都由ApplicationMaster来完成;
- 大致流程:Client客户端发起任务请求,Yarn集群接收到请求后启动ApplicationMaster,ApplicationMaster启动后进行资源申请,申请到资源后开始执行任务
- 详细流程:
(1)Client客户端发起任务执行请求
(2)ResourceManager节点接收到任务请求后,请求一台NodeManager节点启动ApplicationMaster
(3)ApplicationMaster启动后,先初始化SparkContext对象,并根据SparkContext提供的任务信息向ResourceManager节点申请资源
(4)ResourceManager节点接收到资源请求后,根据资源调度机制以Container的形式返回给ApplicationMaster
(5)ApplicationMaster拿着ResourceManager分配的Container资源信息,向NodeManager节点申请对应的资源,以启动运行Executor
(6)Executor启动成功后,反向通知ApplicationMaster,当所有的Executor都启动成功后,ApplicationMaster开始处理代码部分逻辑
(7)ApplicationMaster先加载所有与RDD相关的算子,并根据算子的依赖关系形成DAG有向无环图,然后划分Stage并进行任务分配,通知Executor执行相关任务
(8)Executor接收并执行完任务后,将运行结果反馈给ApplicationMaster
(9)当ApplicationMaster接收到所有Executor的完成信号后,认为任务已经执行完成,与此同时也会将任务完成情况反馈给ResourceManager,ResourceManager开始回收资源,关闭ApplicationMaster
(11)ApplicationMaster还会执行后续与算子无关的代码,代码执行完成后,整个流程就完成了
总结
以上两种模式的运行流程的区别在于Driver程序在哪里运行,Spark On Yarn的Client模式中,Driver程序在请求的机器节点上运行,而Cluster模式下,Driver程序在集群中运行,此时Driver就是Yarn集群中ApplicationMaster,Driver的任务都由ApplicationMaster来完成。