YARN
一、YARN定义
Yet Another Resource Negotiator,YARN, 另一种资源协调者。是Hadoop的一个通用的资源管理系统。
在下一代MapReduce(MRv2)中,包含:
- 数据处理引擎(Map Task、Reduce Task)
- 作业管理(ApplicationMaster)
- 资源管理系统(YARN)
由于YARN通用性,可以作为其他计算框架的资源管理系统,如:Spark、Flink,(MapReduce on YARN、Spark on YARN、Flink on YARN)。
二、YARN作用
- 为上层应用提供统一的资源管理、调度
- 为上层计算模型(MapReduce、Hive、Storm、Spark等)共享集群资源,提供集群资源利用率
- 计算模型间的数据共享
三、YARN基本架构
- 资源管理器(ResourceMangaer)
负责整个系统的资源管理和调度,是YARN主从架构的主节点。由资源调度器(ResourceScheduler) 和全局应用程序管理器(ApplicationManager) 组成。
- 资源调度器
资源调度器是一个可插拔的组件,用户可根据自己需要设计资新的源调度器,YARN提供多个可直接使用的资源调度器。资源调度器将系统中的资源分配给正在运行的程序,不负责监控或跟踪应用的执行状态,不负责重启失败的任务。
常见的资源调度器:FIFO调度器(先进先出)、Capacity调度器(容量调度器)、Fair调度器(公平调度器)
- FIFO调度器:Hadoop最初为批处理作业而设计
- Capacity调度器:以队列为单位划分资源,当一个队列资源有剩余时,可暂时将剩余资源共享给其他队列
- Fair调度器:类似于Capacity调度器
如果需要先提交的Job先执行,使用FIFO调度器。如果所有的Job都有机会获得资源,采用Capacity调度器和Fair调度器。
- 全局应用程序管理器
负责系统中所有应用程序的管理,包括:
1)应用程序的提交;
2)资源调度器协商资源来启动应用程序管理器;
3)监控应用程序管理器的运行状态,并在失败时发出通知。
*具体的任务交由应用程序管理器(ApplicationMaster),全局应用程序管理器(ApplicationManager)相当于一个项目经理
- 应用程序管理器(ApplicationMaster)
用户提交的每一个应用程序都包含一个应用程序管理器,应用程序管理器存在节点中。其负责:
1)与资源管理器 (ResourceMangaer)协商获取资源,并将资源分配给内部具体的任务;
2)与节点管理器 (NodeManager)通讯,以启动/停止具体的任务;
3)监控应用程序所有任务的运行状态,当任务失败时,重新为任务申请资源并重启任务。
- 节点管理器(NodeManager)
节点管理器是YARN主从架构的从节点,是作业运行的执行者 .
1)是每一个节点上的资源和任务管理器,定时向资源管理器汇报本节点的资源使用情况和各个容器的运行状态;
2)接收、处理应用程序管理器的容器启动和停止等请求。
- 容器(Container)
容器是资源的抽象,封装了节点的多维度资源,如内存、CPU、磁盘、网络。当应用程序管理器向资源管理器申请资源时,资源管理器返回的资源是一个容器。该任务只能使用该容器所封装的资源,容器根据应用程序需求,动态生成。
四、YARN工作原理
- 客户端向资源管理器提交一个作业,作业包括:应用程序管理器 ,启用应用程序管理器的程序,用户程序(如:MapReduce)
- 资源管理器 为该应用程序分配一个容器 (即资源)。资源管理器首先与节点管理器进行通信,要求它在此容器中启动应用程序的应用程序管理器。
- 应用程序管理器被开启,向资源管理器注册,注册后用户可以直接通过资源管理器查看到应用程序的运行状态,然后应用程序管理器将为程序的各个任务申请资源并监控它们的运行状态,直至运行完成。以轮询的方式,通过RPC(Remote Procedure Call,远程过程调用) 协议向资源管理器申请领取资源。
- 应用程序管理器获得资源后,将与节点管理器通信,要求其启动并运行任务。
- 各任务通过RPC协议向应用程序管理器汇报状态和进度。一旦任务失败,应用程序管理器将重启任务,并重新申请资源。
- 任务完成后,应用程序管理器将向资源管理器注销并关闭该任务。
五、YARN的高可用(HA)
YARN的HA主要是指资源管理器的HA。
与HDFS类似,YARN的单点故障采用主备切换的方式完成。但,正常情况下,YARN备份节点不会同步主节点的信息,只有主备切换之后,才会从共享储存系统读取所需的信息。(原因:资源管理器保存的信息非常少,且信息动态变化,大部分可以重构,原有信息很快就变旧,没有同步必要)。
YARN直接以来Zookeeper的储存功能完成主备节点的信息共享。