当前位置: 首页> 文旅> 酒店 > 【Yarn】Yarn的基本执行流程(一)应用程序提交

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

时间:2025/7/9 21:15:40来源:https://blog.csdn.net/weixin_43820556/article/details/141437245 浏览次数:0次

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

文章目录

    • Yarn的基本执行流程之应用程序提交
    • 应用程序提交
      • 客户端提交的流程
      • 任务提交时在RM上的步骤

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的启动

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: