【Yarn】Yarn的基本执行流程(一)应用程序提交

Yarn的基本执行流程之应用程序提交

node manager node2
Container
resource manage node
node manager node1
Container_AM
client node
1.提交应用(submit request)
2.1分配并启动application master
2.3启动
2.2资源本地化
3.Register App Master 申请资源
4.分配资源
5.1分配启动任务
5.2资源本地化
5.3启动
node manager
application
process
resource manager
node manager
application
process
Application
Client
HDFS
  1. 客户端向RM提交应用,本质上是向RM请求启动AM
  2. RM进行分配NM,并要求NM启动AM
    1. NM收到启动AM的请求后,根据所携带的参数,下载AM所依赖的资源到本地
    2. 完成依赖资源的本地化后,NM启动AM进程
  3. AM启动后向RM进行注册,并向RM申请启动任务containr所需的资源
  4. RM根据NM的资源汇报情况,向AM回复资源(container)的分配情况,即给请求的任务container分配具体的NM。
  5. AM根据任务container分配的NM,向对应的NM发送请求,要求启动任务container
    1. NM收到启动任务container的请求后,同样根据请求参数,先完成依赖资源的本地化
    2. 然后启动任务container进程。

应用程序提交

客户端提交的流程

YarnClientImpl ClientRMService 1.获取新的Application getNewApplication() 2.生成新的Application(拿到新的ApplicationId) 3.GetNewApplicationResponse 4.提交任务,轮询直到应用处于ACCEPTED submitApplication() YarnClientImpl ClientRMService
  1. 客户端向RM申请Application的ID
  2. RM内部生成application的唯一ID
  3. 通过rpc响应将applicaiton ID告知客户端
  4. 客户端携带ID,以及container上下文,通过RPC向RM提交任务。

Yarn Client(YarnClientImpl) 与 RM 进行 RPC 通信是通过 ClientRMService 服务实现的,应用程序提交到服务端,会调用 RMAppManager 类的对应方法来处理应用程序。

任务提交时在RM上的步骤

ClientRMService RMAppManager RMAppImpl RMStateStore FairScheduler RMAppAttemptImpl ApplicationMasterService 1. 提交任务 submitApplication() 2. 创建RMAppImpl 3. 触发RMAppEvent(RMAppEventType.START) 执行RMAppNewlySavingTransition() 4. 存储NewApplication信息 storeNewApplication() 5. 触发RMAppEvent (RMAppEventType.APP_NEW_SAVED) AddApplicationToSchedulerTransition() 6. 触发AppAddedSchedulerEvent (SchedulerEventType.APP_ADDED) 7. 触发RMAppEvent (RMAppEventType.APP_ACCEPTED) StartAppAttemptTransition() 8. 创建实例 createNewAttempt() 9. 触发RMAppStartAttemptEvent (RMAppAttemptEventType.START) AttemptStartedTransition() 10. registerApplicationAttempt 11. 触发AppAttemptAddedSchedulerEvent 12. 触发RMAppAttemptEvent (SchedulerEventType.APP_ATTEMPT_ADDED) ScheduleTransition() 13. 申请分配AM需要的资源 allocate() ClientRMService RMAppManager RMAppImpl RMStateStore FairScheduler RMAppAttemptImpl ApplicationMasterService
  1. ClientRMService将请求转发给内部的AppManager。

  2. AppManager创建一个App实例对象(RMAppImpl)。

  3. 随后向调度器发送RMAppEventType.START事件,触发处理方法RMAppNewlySavingTransition()

  4. RMAppImpl收到事件后,向状态存储服务请求保存App状态,RMStateStoreState.ACTIVE–>RMStateStoreState.ACTIVE???RMAppState状态从NEW变为NEW_SAVING。

  5. 状态存储服务完成APP信息的存储后,再以RMAppEventType.APP_NEW_SAVED事件的形式告知RMAppImpl,执行方法AddApplicationToSchedulerTransition()

  6. RMAppImpl向调度器发送AppAddedSchedulerEvent的事件,由调度器进行处理,RMAppState状态从NEW_SAVING变为SUBMITTED。

  7. 调度器收到消息后,进行相应的处理动作,然后告知RMAppImpl应用被接受。

  8. RMAppImpl创建Attempt实例对象(RMAppAttemptImpl

  9. 接着向其发送RMAppAttemptEventType.START事件,将RMAppAttemptState.NEW将变成RMAppAttemptState.SUBMITTED

  10. Attempt创建后,先向ApplicationMasterService进行注册,使其在内存中有对应的记录,方便后面真正的AM进程进行注册。

  11. 然后,向调度器发送AppAttemptAddedSchedulerEvent事件。

  12. 调度器同样进行一系列的处理,包括权限判断,队列应用计数等,在内存中记录相关信息,最后通知Attempt成功添加。

  13. Attempt调用调度器的接口,申请启动AM所需的资源,同时RMAppAttemptState状态保持SUBMITTED。

此时客户端等待结束(提交成功)。等待NM RM心跳交互触发调度。RMAppState状态为ACCEPTED。RMAppAttemptState状态为SUBMITTED

当RM和NM正常启动运行时,NM会与RM进行心跳交互,来进行消息交互和处理流程。

【Yarn】Yarn的基本执行流程(二)AM Container的启动

  • 20
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 答:Spark提交Yarn的流程主要包括以下几个步骤:1.运行Spark应用程序;2.将Spark应用程序打包成jar或zip文件;3.使用spark-submit命令提交应用程序Yarn;4.Yarn接收应用程序并将其分配给节点;5.Yarn调度器负责调度应用程序;6.Yarn监控应用程序的执行;7.应用程序结束时,Yarn将结果发送给用户。 ### 回答2: 将Spark程序提交YARN的流程如下: 1. 准备YARN集群:首先需要搭建一个YARN集群,包括至少一个YARN管理节点(ResourceManager)和多个YARN工作节点(NodeManager)。ResourceManager负责整个集群的资源分配和任务调度,NodeManager负责执行具体的计算任务。 2. 准备Spark程序和配置:将要运行的Spark程序编写好,并进行必要的配置。Spark程序可以使用Scala、Java或Python等语言编写,配置文件可以设置Spark应用的相关参数,如内存分配、并行度等。 3. 打包Spark应用程序:将编写好的Spark程序及其依赖库打包成一个可执行的Jar包,以方便在YARN上运行。 4. 提交Spark应用到YARN:使用YARN提供的命令或客户端工具,将打包好的Spark应用程序提交YARN集群。在提交时,需要指定应用程序的配置信息,如所需的资源、启动脚本、提交人等。 5. YARN任务调度:一旦Spark应用程序提交YARN集群,YARN的ResourceManager会对其进行资源分配和任务调度。根据应用程序的需求,ResourceManager会为其分配合适的资源,并确定在哪些节点上启动相应的任务。 6. 启动Spark任务:YARN的NodeManager接收到Spark任务后,负责启动Executor进程。每个Executor进程是一个独立的Java进程,负责执行Spark应用程序的具体计算任务。 7. 执行Spark应用程序:一旦Executor进程启动,Spark应用程序开始在YARN集群上执行。Executor会根据应用程序的逻辑,调度并执行具体的计算任务,包括读取数据、转换处理等操作。 8. 监控和管理:在Spark应用程序执行的过程中,可以通过YARN提供的监控工具来查看任务的运行状态、资源使用情况等。此外,还可以通过YARN的管理命令对任务进行调度、监控和管理。 9. 完成和收集结果:一旦Spark应用程序执行完毕,可以从YARN集群上收集各个任务的输出结果。根据需要,可以将结果存储到HDFS、本地文件系统或其他存储介质中。 以上是将Spark程序提交YARN基本流程,通过YARN的资源管理和任务调度,可以有效地管理和利用集群资源,并实现分布式的Spark计算。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

顧棟

若对你有帮助,望对作者鼓励一下

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值