了解yarn任务的提交过程,有助于我们理解Yarn设计理念。
1.Yarn任务提交过程
提交流程如下图所示
共分为9个过程。
(1)客户端向ResourceManager提交任务,本质上是向ResourceManager请求启动ApplicationMaster
(2)ResourceManager选择合适的NodeManager,并向NodeManager发送请求,要求启动ApplicationMaster
(3)NodeManager收到启动ApplicationMaster的请求后,根据所携带的参数,下载ApplicationMaster所依赖的资源到本地
(4)完成依赖资源的本地化后,NodeManager启动ApplicationMaster进程
(5)ApplicationMaster启动后向ResourceManager进行注册,并向ResourceManager申请启动任务container所需的资源
(6)ResourceManager根据NodeManager的资源汇报情况,向ApplicationMaster回复资源(container)的分配情况,即给请求的任务container分配具体的NodeManager。要注意的是,ResourceManager是等待NodeManager进行心跳汇报后,被动触发进行的。
(7)ApplicationMaster根据任务container分配的NodeManager,向对应的NodeManager发送请求,要求启动任务container
(8)NodeManager收到启动任务container的请求后,同样根据请求参数,先完成依赖资源的本地化,然后启动任务container进程
(9)启动Container进程。任务container的运行状态,是NodeManager通过心跳向ResourceManager汇报,ResourceManager再通过ApplicationMaster的心跳响应告知对应的ApplicationMaster。
2.从源码看yarn任务提交
任务提交过程中,接口调用顺序如下图所示: