YARN分布式资源管理 任务调度/监控系统, 由ResourceManager、NodeManager组成。
ResourceManager
包含Scheduler和ApplicationsManager
1. Scheduler:
- 负责将资源分配给运行的 application,Scheduler是纯粹的调度程序,因为它不执行对应用程序状态的监视或跟踪。此外,它也不能保证由于应用程序故障或硬件故障而重新启动失败的任务。
- Scheduler根据应用程序的资源需求执行调度功能。它基于一个抽象的资源容器的概念,它包含了诸如内存、cpu、磁盘、网络等元素。
- Scheduler有一个可插入的策略,负责在不同的队列、应用程序等之间划分集群资源。例如CapacityScheduler(容量调度器)和FairScheduler(公平调度器)。
CapacityScheduler 默认调度策略
将集群划分出来多个队列,每个队列可以占用的资源不同,每个队列可设定一定比例的资源最低保证和使用上限,并支持资源共享,将队列剩余资源共享给其他队列使用。容量保证 弹性调度 多租户管理 安全隔离。
CapacityScheduler中的资源抢占
【队列间的抢占】
在多个队列之间进行资源的抢占,保证每个队列的最小资源(队列的capacity配置)得以满足。
【队列内的抢占】
一种是按任务的优先级来,即高优先级的任务处于待分配状态后,将从低优先级任务抢占资源;另一种是按用户资源来划分,即队列内多个用户提交的任务,从占用资源最多的那个用户进行抢占,其本质上是保证每个用户的资源使用趋于平等。
2. ApplicationsManager
- ApplicationsManager负责接受作业提交,与第一个容器协商执行application的ApplicationMaster,并提供在失败时重新启动ApplicationMaster容器的服务。
NodeManager
NodeManager 是 ResourceManager 在每台机器的上代理,负责容器的管理,并监控他们的资源使用情况(cpu,内存,磁盘及网络等),以及向 ResourceManager/Scheduler 提供这些资源使用报告。
nodeManager负责节点上面的containers的启动和管理, containers执行ApplicationMaster指定的task。
ApplicationMaster
ApplicationMaster 负责与 Scheduler 协商合适的 Container,跟踪应用程序的状态,以及监控它们的进度,ApplicationMaster 是协调集群中应用程序执行的进程。每个应用程序都有自己的 ApplicationMaster,负责与 ResourceManager 协商资源(container)和 NodeManager 协同工作来执行和监控任务 。