YARN最基本的想法就是将资源管理的功能和作业调度/监控的功能分隔在不同的进程中。即使用一个全局的资源管理器(RM)和每个应用一个的应用节点(AM)。应用要么是一个单独的作业,要么是一组满足有向无环图的作业。
资源管理器和节点管理器共同组成了数据计算框架。资源管理器负责为系统中的应用分配资源。节点管理器是各个机器的框架代理,负责管理容器,监控资源使用情况(CPU,内存,磁盘,网络)并向资源管理器/调度器报告。
AM(ApplicationMaster)以应用为单位,它实际是一个特定于框架的类库,它从资源管理器申请资源,在节点管理器上运行并监控任务。
image
资源管理器有两个主要组件:调度器和应用管理器(ApplicationManager)。
调度器负责根据容量,队列等限制为容器分配资源,它不负责监控或跟踪应用的状态,它也不保证会在应用故障或硬件故障后重启失败的任务。调度器根据应用对资源的要求执行调度工作,即对资源做的抽象:容器,容器包含的元素有内存,CPU,磁盘和网络等。
调度器有一个可以按照队列或应用将资源分组的可插拔策略。当前的调度器CapacityScheduler
和FairScheduler
都使用了这个策略。
应用管理器负责接受作业提交,为特定与AM的应用协商第一个容器,并在发生故障是重启AM容器。AM负责从调度器协商容器资源,跟踪并监控状态。
YARN也支持资源预留概念,使用ReservationSystem
实现,该组件允许用户指定一个有关超时和时序约束(例如deadline)的配置,并预留资源来确保重要的作业可以正常运行。ReservationSystem
随着时间追踪资源,执行预留的准入控制,并动态指示调度器确保预留了足够资源。
为了将YARN扩展至上千个节点,YARN通过YARN federation特性提供了联合概念。联合特性可以将多个YARN集群联结起来,对外看起来像是一个集群。这个特性可以实现大规模扩展,或者可以用对个独立集群运行超大作业。
网友评论