“Yarn 全称 Yet Another Resource Negitiator,就是另一种资源调度器,主要负责Hadoop集群内任务的资源调度框架。”
01
—
Yarn组件
Yarn的任务的运行,都是在一个容器(Container)内进行的,这个容器是任务运行时所需资源的抽象,包括内存、CPU等,也是Yarn进行资源分配、释放的基本单位。
MapReduce 的任务,会分成 Map 任务和 Reduce 任务,在集群里面就是 Map Task 和 Reduce Task,这些任务会运行在 Container 上面的。
ResourceManager
整个集群只有一个ResourceManager,是Master,负责整个集群资源的调度,包括调度器和应用管理器两个组件:
调度器:当 Client 提交的任务时,根据所需要的资源以及当前集群的资源状况进行分配,这里资源分配的单位就是Container;
应用管理器:负责监控集群中任务的运行情况,主要通过节点对任务执行情况的上报。
NodeManager
集群里面包含多个NodeManager,是ResourceManager的Slave,负责节点上容器整个生命周期的管理,包括:处理ResourceManager资源分配请求,为任务分配容器;
通过监控容器状态,包括CPU、内存、磁盘、网络等,并且将这些信息向 ResourceManager 进行上报,以便ResourceManager了解各个节点的状态,以便进行其他任务的调度;
ApplicationMaster
每当 Client 提交一个任务时,就会创建一个 ApplicationMaster,作为这个任务整体执行情况的监控者和资源的协调者;
ApplicationMaster 与 Map Task 和 Reduce Task 一样,都运行在某个 NodeManager 的容器上;
ApplicationMaster 与 ResourceManager 会在任务运行整个过程中进行交互,包括资源的申请、释放;
02
—
Yarn运行原理
Yarn 的运行原理,也就是整个任务的生命周期,包括:任务的提交、初始化、分配、执行,执行状态、完成。
1、客户端将任务提交到 ResourceManager;
2、ResourceManager 负责协调创建 ApplicationMaster,在集群中某个 NodeManager 上分配容器,启动 ApplicationMaster;
3、ApplicationMaster 与 ResourceManager 进行交互,为任务要执行的 Task 申请资源,获得资源后,与对应的 NodeManager 进行交互,启动对应的 Task;
4、执行过程中,NodeManager 将 ResourceManager 上报节点的状态:内存、CPU、磁盘等;ApplicationMaster 也统计各个 Task 执行情况,也对 ResourceManager 进行上报任务信息;
5、任务执行中,会有相应的 Task执行完毕,这时,需要ApplicationMaster根据 Task完成状态,向ResourceManager 进行资源的释放,以便 ResourceManager 为后续 Task 分配资源;
6、所有任务执行完成,ApplicationMaster 向 ResourceManager 注销,整个应用运行结束。
03
—
Yarn调度器
Hadoop 集群是整体的、共用的资源,允许多个任务同时在集群内运行,当集群特别繁忙的时候,提交的任务可能要等待一段时间才能得到相应的资源。这时,Yarn 需要根据不同的集群任务场景,来设置不同的执行策略,也就是配置不同的调度器。目前,包括以下三种:
FIFO Scheduler
所有提交的任务排成一个队列,按照先进先出方式,依次进行资源的分配;
Capacity Scheduler
将整个集群划分成不同的组织,每个组织可以获得集群的一部分计算能力,为不同的组织分配专门的队列,每个组织内部的调度策略是采用先进先出的方式。
可以设置每个组织的最大容量,设置了最大容量的话,当已为组织分配的资源不够用时,可以扩展到最大容量,没有设置最大容量,将有可能使用整个集群的最大容量。
在提交任务时,可以通过configuration指定使用哪个组织运行该任务。
我们可以将不同的组织作为不同的用途使用,比如设置一个组织只负责运行小任务,避免由于集群运行大任务,而导致小任务不能得到适当的执行。
Fair Scheduler
Fair调度器是会动态调整系统资源,如果向集群提交一个大任务,如果集群只有这一个任务的话,这个大任务将会获得集群全部资源,当集群收到第二个任务时,集群会释放一部分第一个任务的资源供第二个任务申请使用,所有Fair调度器在任务提交和执行过程中,会有一段时间延迟;
Fair调度器允许向Capacity调度器设置不同分组,分组内部仍然是按照公平调取器原则进行资源分配;
Fair调度器支持抢占,也就是支持抢占那些占有资源超过其公平共享份额的容器,使容器资源释放后,可以分配给资源份额低于应得份额的队列。
1、https://www.jianshu.com/p/f50e85bdb9ce
2、《Hadoop权威指南》
3、http://hadoop.apache.org/docs/stable/hadoop-yarn/hadoop-yarn-site/YARN.html