文章转载自:https://blog.csdn.net/Mr_HHH/article/details/81127373
Yarn的设计目标就是允许我们的各种应用以共享、安全、多租户的形式使用整个集群。 YARN主要有以下几个部分组成:
Global ResourceManager,系统中资源分配的老大(Boss),主要由两部分:Scheduler and ApplicationManager。 1.1 Scheduler:是ResourceManager专门进行资源管理的一个组件,负责分配NodeManager上的Container资源 。 1.2 per-application ApplicationMaster(项目经理) 每个application向RM申请resource 与NM协作一起执行和监视任务 重启失败的任务。per-machine NodeManager(小组长):分配container给作业使用,并且监控作业的运行、资源的使用(cpu、memory…),并把这些情况向RM汇报。 2.1 Container(抽象概念):是Yarn对计算机计算资源的抽象,它其实就是一组CPU和内存资源,也是YARN框架的计算单元。这里从一个任务的提交开始分析这个任务在yarn中的具体流程:
1:用户提交任务到ResourceManager,ResourceManager中包含两个组件,其中一个是Scheduler,另一个是ApplicationManager,这个时候组件ApplicationManager负责接收job的提交请求,为应用分配第一个Container来运行ApplicationMaster,还有就是负责监控ApplicationMaster,在遇到失败时重启ApplicationMaster运行的Container。
2:ApplicationMaster向ResourceManager进行注册,注册之后客户端就可以查询ResourceManager获得自己ApplicationMaster的详细信息,以后就可以和自己的ApplicationMaster直接交互了,这个时候,客户端主动和ApplicationMaster交流,应用先向ApplicationMaster发送一个满足自己需求的资源请求,然后ApplicationMaster把这个资源请求以resource-request的形式发送给ResourceManager的Scheduler,Scheduler再在这个原始的resource-request中返回分配到的资源描述Container。ApplicationMaster在得到这些Containers后,还需要与分配Container所在机器上的NodeManager交互来启动Container并运行相关任务,当然Container的分配是需要认证的,以防止ApplicationMaster自己去请求集群资源。
3:应用程序的代码在启动的Container中运行,并把运行的进度、状态等信息通过application-specific协议发送给ApplicationMaster。
4:在应用程序运行期间,提交应用的客户端主动和ApplicationMaster交流获得应用的运行状态、进度更新等信息,交流的协议是application-specific协议。
5:一但应用程序执行完成并且所有相关工作也已经完成,ApplicationMaster向ResourceManager取消注册然后关闭,最后把所有的Container也归还给系统,任务运行结束!