YARN资源管理框架的体系结构
YARN(Yet Another Resource Negotiator,另一种资源协调者)是一个通用的资源管理系统和调度平台,它的基本设计思想是将MRv1(Hadoop1.0中的MapReduce)中的JobTracker拆分为两个独立的任务,这两个任务分别是全局的资源管理器ResourceManager和每个应用程序特有的ApplicationMaster。其中,ResourceManager负责整个系统的资源管理和分配,而ApplicationMaster负责单个应用程序的管理。接下来,我们通过一张图来描述YARN的体系结构,具体如图1所示。
图1 YARN体系结构
在图1中,YARN体系结构的核心组件有三个,具体介绍如下:
1. ResourceManager
ResourceManager是一个全局的资源管理系统,它负责的是整个Yarn集群资源的监控、分配和管理工作,具体工作如下:
(1) 负责处理客户端请求
(2) 接收和监控NodeManager(NM)的资源情况
(3) 启动和监控ApplicationMaster(AM)
(4) 资源的分配和调度
值得一提的是,在ResourceManager内部包含了两个组件,分别是调度器(Scheduler)和应用程序管理器(Application Manager),其中调度器根据容量、队列等限制条件(如每个队列分配一定的资源,最多执行一定数量的作业等),将系统中的资源分配给各个正在运行的应用程序。该调度器是一个“纯调度器”,它不再从事任何与具体应用程序相关的工作;而应用程序管理器(Applications Manager)负责管理整个系统中所有的应用程序,包括应用程序的提交、调度协调资源以启动ApplicationMaster、监控ApplicationMaster运行状态并在失败时重新启动。
2.NodeManager
NodeManager是每个节点上的资源和任务管理器,一方面,它会定时的向ResourceManager汇报所在节点的资源使用情况 , ;另一方面,它会接收并处理来自ApplicationMaster的启动停止容器(Container)的各种请求。
3.ApplicationMaster
用户提交的每个应用程序都包含一个ApplicationMaster,它负责协调来自ResourceManager的资源,把获得的资源进一步分配给内部的各个任务,从而实现“二次分配”。除此之外,ApplicationMaster还会通过NodeManager监控容器的执行和资源使用情况,并在任务运行失败时重新为任务申请资源以重启任务。当前的YARN自带了两个ApplicationMaster的实现,一个是用于演示ApplicationMaster编写方法的实例程序DistributedShell,它可以申请一定数目的Container以并行方式运行一个Shell命令或者Shell脚本;另一个则是运行MapReduce应用程序的ApplicationMaster-MRAppMaster。
需要注意的是,ResourceManager负责监控ApplicationMaster,并在ApplicationMaster运行失败的时候重启它,大大提高集群的拓展性。ResourceManager不负责ApplicationMaster内部任务的容错,任务的容错由ApplicationMaster完成,总体来说,ApplicationMaster的主要功能是资源的调度、监控与容错。