`

job运行流程(2)---ResourceManager调度job

阅读更多

6、接着上篇文章中的最后一步:ResourceManager服务端执行ClientRMService.submitApplication(),接着开始调用RMAppManager.submitApplication()进而来触发RMAppEvent事件,成为job调度运行事件触发的源头;

(本系列文章主要分析job调度运行流程的主要事件流程,像其它的日志读写事件流程、container监控流程等并没有包括在内)

 

7、接着触发了RMAppImpl.handle(),这其中注册了多种状态转换机制,负责RMAppState的各种状态转换;

 

8、ResourceManager服务启动初始化时会启动一个线程,循环处理container的调度分配,具体过程如下:

ResourceManager.serviceInit->ResourceManager.RMActiveServices.serviceInit

->ResourceManager.createScheduler->ResourceScheduler(默认为CapacityScheduler).reinitialize()

->CapacityScheduler.AsyncScheduleThread.start()

然后循环处理各个nodemanager上面的containers资源分配

CapacityScheduler.schedule()->CapacityScheduler.allocateContainersToNode()

->LeefQueue.assignContainers()->LeefQueue.assignContainersOnNode()

->LeefQueue.assignContainer()->FiCaSchedulerApp.allocate()->RMContainerImpl.handle(RMContainerEventType.START)

更新状态RMContainerState.NEW->RMContainerState.ALLOCATED

 

9、接着后面会触发RMAppAttemptImpl.handle(),这其中和RMAppImpl类似,同样注册了多种状态转换机制,负责RMAppAttemptState的各种状态转换;

 

10、接着后面会触发RMContainerImpl.handle(),同样注册了多种状态转换机制,负责RMContainerState的各种状态转换,这里会触发RMAppAttemptEventType.CONTAINER_ALLOCATED事件,进而开始触发ApplicationMasterLaunch相关事件,至此完成了YARN中的ResourceManager端的job调度流程;

 

整个流程如下图所示:

 

 

 下一篇:http://rainforc.iteye.com/blog/2287249

  • 大小: 133.8 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics