YARN 的基本思想是将资源管理和作业调度/监控的功能拆分为单独的守护程序。这个想法是拥有一个全局 ResourceManager (RM) 和每个应用程序的 ApplicationMaster (AM)。应用程序可以是单个作业或作业的 DAG。
ResourceManager 和 NodeManager 构成了数据计算框架。ResourceManager 是最终权威,它在系统中的所有应用程序之间仲裁资源。NodeManager 是每个机器的框架代理,负责容器,监视它们的资源使用情况(CPU、内存、磁盘、网络),并将这些信息报告给 ResourceManager/Scheduler。
每个应用程序的 ApplicationMaster 实际上是一个特定于框架的库,负责从 ResourceManager 协商资源,并与 NodeManager 合作执行和监视任务。
ResourceManager 有两个主要组件:Scheduler 和 ApplicationsManager。
Scheduler 负责根据容量、队列等常见约束将资源分配给各种正在运行的应用程序。Scheduler 是纯调度程序,因为它不执行应用程序状态的监视或跟踪。此外,它也不保证重新启动因应用程序故障或硬件故障而失败的任务。Scheduler 根据应用程序的资源要求执行其调度功能;它基于资源容器的抽象概念执行此操作,该概念包含内存、CPU、磁盘、网络等元素。
Scheduler 有一个可插入的策略,负责在各种队列、应用程序等之间划分集群资源。当前的调度程序(例如 CapacityScheduler 和 FairScheduler)将是一些插件示例。
ApplicationsManager 负责接受作业提交,协商用于执行特定于应用程序的 ApplicationMaster 的第一个容器,并提供在发生故障时重新启动 ApplicationMaster 容器的服务。每个应用程序的 ApplicationMaster 负责从 Scheduler 协商适当的资源容器,跟踪其状态并监视进度。
hadoop-2.x 中的 MapReduce 维护与以前的稳定版本(hadoop-1.x)的API 兼容性。这意味着所有 MapReduce 作业仍然可以在 YARN 之上运行,而无需更改,只需重新编译即可。
YARN 通过 ReservationSystem 支持资源预留的概念,该组件允许用户指定一段时间内的资源配置文件和时间约束(例如,截止时间),并预留资源以确保重要作业的可预测执行。ReservationSystem 跟踪一段时间内的资源,对预留执行准入控制,并动态指示底层调度程序以确保预留得到满足。
为了将 YARN 扩展到数千个节点之外,YARN 通过 YARN Federation 功能支持联合的概念。联合允许透明地将多个 yarn(子)集群连接在一起,并使它们看起来像一个巨大的集群。这可用于实现更大规模,和/或允许将多个独立集群一起用于非常大的作业,或用于在所有集群中具有容量的租户。