Yet Another Resource Negotiator
通用的资源管理系统
为上层应用提供统一的资源管理和调度
1)ResourceManager(RM):
整个集群同一时间提供服务的RM只有一个,负责集群资源的统一管理和调度处理客户端的请求:
提交一个作业,杀死一个作业
监控NodeManager,一旦某个NM挂了,那么该NM上运行的任务就会告诉各自任务
的AM该如何处理。
Resourcemanager中有两个主要组件:Scheduler和 ApplicationsManager
ApplicationsMaster:检测状态和从调度中获取资源。
Scheduler:负责分配资源给正在运行的应用程序。
2)NodeManager(NM):
集群中有很多,负责自己本身节点资源管理和使用,定时向RM汇报本节点的资源使用情况
接受并处理来自RM的各种命令:启动Container等。
处理来自AM的命令
单个自己节点的管理
3)ApplicationMaster(AM):
每个应用程序(MR,Spark等)对应一个AM,负责应用程序的管理。为应用程序向
RM申请资源(core,memory等),再分配给内部的task。
需要与NM通信:启动或停止task。task运行在container里面,AM也是运行在里面
(客户端提交一个任务被集群作为一个应用程序,一个应用程序会通过RM在某个NM上
创建一个AM,但是该应用程序会被分解为很多task,分布在不同的NM上)
4)Container:
封装了CPU,Memory等资源的一个容器,是一个任务运行环境的抽象
5)Client:
提交任务作业,查看作业进度,杀死作业
大致流程:
(1) Client向 Resourcemanager提交任务。
(2) Reourcemanager分配创建 Container任务并告知 Nodemanage启动进程 MRAppMastere
(3) NodeManager接收指定任务并开辟空间启动 MRAppMaster
(4) Nodemanager完成任务之后会及时汇报给 Resourcemanager
(5) Mrappmaster 和 Resourcemanager 交互,获取运行任务所需要的资源
(6) MRAppmaster获取资源后和 Nodemanager进行通信,启动 MapTask或Reducetask进程
(7)任务正常运行、定时向 Mrappmaster汇报工作情况。
详细流程:
1) Client提交ー个Job到 ResourceManager,进入ResourceManager中的Scheduler队列等待调度。
2) ResourceManager根据 NodeManager汇报的资源情况( NodeManager会定时汇报资源和Container使用情况,
请求一个合适的 NodeManager启动Container,并在该Container中启动运行 Applicalionmaster.
3) ApplicationMaster启动后,住册到 ResourceManager上,以使Client可以查询到ApplicationMaster的信息,
便于Client直接和 ApplicationMaster通信。
4) ApplicationMaster根据Job划分的Task状况,向 ResurceManager协商申请Container资源。
5) ResourceManager分配给 ApplicationMaster Container资源后, ApplicationMaster根据 Container内描述
的资源信息,向对应的 NodeManager请求启动 Container,
6) NodeManager启动 Container并运行Task,各个Task在运行过程中向 ApplicationMaster汇报进度状态信息,
同时 NodeManager也会定时向 ResourceManager汇报Container的使用情况。
7)在Job执行过程中, Client可以和 ApplicationMaster通信,获取 Application相关的进度和状态信息。
8)在Job完成后, ApplicationMaster通知 ResourceManager清除自己的相关信息,并释放 Container资源。