5.29 YARN
5.29.1 YARN 基本原理
为了实现一个Hadoop集群的集群共享、可伸缩性和可靠性,并消除早期MapReduce 框架中的JobTracker性能瓶颈,开源社区引入了统一的资源管理框架YARN。
YARN是将JobTracker的两个主要功能(资源管理和作业调度/监控)分离,主要方法是 创建一个全局的ResourceManager(RM)和若干个针对应用程序的
ApplicationMaster(AM)。
说明
应用程序是指传统的MapReduce作业或作业的DAG(有向无环图)。
YARN 结构
YARN分层结构的本质是ResourceManager。这个实体控制整个集群并管理应用程序向 基础计算资源的分配。ResourceManager将各个资源部分(计算、内存、带宽等)精 心安排给基础NodeManager(YARN的每节点代理)。ResourceManager还与 Application Master一起分配资源,与NodeManager一起启动和监视它们的基础应用 程序。在此上下文中,Application Master承担了以前的TaskTracker的一些角色,
ResourceManager 承担了JobTracker的角色。
Application Master管理一个在YARN内运行的应用程序的每个实例。Application Master负责协调来自ResourceManager的资源,并通过NodeManager监视容器的执 行和资源使用(CPU、内存等的资源分配)。
NodeManager管理一个YARN集群中的每个节点。NodeManager提供针对集群中每个 节点的服务,从监督对一个容器的终生管理到监视资源和跟踪节点健康。MRv1通过插 槽管理Map和Reduce任务的执行,而NodeManager管理抽象容器,这些容器代表着 可供一个特定应用程序使用的针对每个节点的资源。
图5-126 YARN 结构
图5-126中各部分的功能如表5-27所示。
表5-27 结构图说明
名称 描述
Client YARN Application客户端,用户可以通过客户端向ResourceManager 提交任务,查询Application运行状态等。
ResourceM anager(R M)
负责集群中所有资源的统一管理和分配。接收来自各个节点
(NodeManager)的资源汇报信息,并根据收集的资源按照一定的策 略分配给各个应用程序。
NodeMan
ager(NM) NodeManager(NM)是YARN中每个节点上的代理,管理Hadoop集 群中单个计算节点,包括与ResourceManger保持通信,监督
Container的生命周期管理,监控每个Container的资源使用(内存、
CPU等)情况,追踪节点健康状况,管理日志和不同应用程序用到的 附属服务(auxiliary service)。
Applicatio nMaster(A M)
即图中的App Mstr,负责一个Application生命周期内的所有工作。包 括:与RM调度器协商以获取资源;将得到的资源进一步分配给内部任 务(资源的二次分配);与NM通信以启动/停止任务;监控所有任务 运行状态,并在任务运行失败时重新为任务申请资源以重启任务。
Container Container是YARN中的资源抽象,封装了某个节点上的多维度资源,
如内存、CPU、磁盘、网络等(目前仅封装内存和CPU),当AM向 RM申请资源时,RM为AM返回的资源便是用Container表示。YARN会 为每个任务分配一个Container,且该任务只能使用该Container中描 述的资源。
在YARN中,资源调度器是以层级队列方式组织资源的,这种组织方式有利于资源在不 同队列间分配和共享,进而提高集群资源利用率。如下图所示,Superior Scheduler和 Capacity Scheduler的核心资源分配模型相同。
调度器会维护队列的信息。用户可以向一个或者多个队列提交应用。每次NM心跳的时 候,调度器会根据一定规则选择一个队列,再选择队列上的一个应用,并尝试在这个 应用上分配资源。若因参数限制导致分配失败,将选择下一个应用。选择一个应用 后,调度器会处理此应用的资源申请。其优先级从高到低依次为:本地资源的申请、
同机架的申请,任意机器的申请。
图5-127 资源分配模型
YARN 原理
新的Hadoop MapReduce框架被命名为MRv2或YARN。YARN主要包括 ResourceManager、ApplicationMaster与NodeManager三个部分。
● ResourceManager:RM是一个全局的资源管理器,负责整个系统的资源管理和分 配。主要由两个组件构成:调度器(Scheduler)和应用程序管理器
(Applications Manager)。
– 调度器根据容量、队列等限制条件(如每个队列分配一定的资源,最多执行 一定数量的作业等),将系统中的资源分配给各个正在运行的应用程序。调 度器仅根据各个应用程序的资源需求进行资源分配,而资源分配单位用一个 抽象概念Container表示。Container是一个动态资源分配单位,将内存、
CPU、磁盘、网络等资源封装在一起,从而限定每个任务使用的资源量。此 外,该调度器是一个可插拔的组件,用户可根据自己的需要设计新的调度 器,YARN提供了多种直接可用的调度器,比如Fair Scheduler和Capacity Scheduler等。
– 应用程序管理器负责管理整个系统中所有应用程序,包括应用程序提交、与 调度器协商资源以启动ApplicationMaster、监控ApplicationMaster运行状态 并在失败时重新启动等。
● NodeManager:NM是每个节点上的资源和任务管理器,一方面,会定时向RM汇 报本节点上的资源使用情况和各个Container的运行状态;另一方面,接收并处理 来自AM的Container启动/停止等请求。
● ApplicationMaster:AM负责一个Application生命周期内的所有工作。包括:
– 与RM调度器协商以获取资源。
– 将得到的资源进一步分配给内部的任务(资源的二次分配)。
– 与NM通信以启动/停止任务。
– 监控所有任务运行状态,并在任务运行失败时重新为任务申请资源以重启任 务。
开源容量调度器 Capacity Scheduler 原理
Capacity Scheduler是一种多用户调度器,它以队列为单位划分资源,为每个队列设定 了资源最低保证和使用上限。同时,也为每个用户设定了资源使用上限以防止资源滥 用。而当一个队列的资源有剩余时,可暂时将剩余资源共享给其他队列。
Capacity Scheduler支持多个队列,为每个队列配置一定的资源量,并采用FIFO调度策 略。为防止同一用户的应用独占队列资源,Capacity Scheduler会对同一用户提交的作 业所占资源量进行限定。调度时,首先计算每个队列使用的资源,选择使用资源最少 的队列;然后按照作业优先级和提交时间顺序选择,同时考虑用户资源量的限制和内 存限制。Capacity Scheduler主要有如下特性:
● 容量保证。管理员可为每个队列设置资源最低保证和资源使用上限,而所有提交 到队列的应用程序共享这些资源。
● 灵活性。如果一个队列中的资源有剩余,可以暂时共享给那些需要资源的队列,
而一旦该队列有新的应用程序提交,则占用资源的队列将资源释放给该队列。这 种资源灵活分配的方式可明显提高资源利用率。
● 多重租赁。支持多用户共享集群和多应用程序同时运行。为防止单个应用程序、
用户或者队列独占集群中的资源,管理员可为之增加多重约束(比如单个应用程 序同时运行的任务数等)。
● 安全保证。每个队列有严格的ACL列表规定它的访问用户,每个用户可指定哪些 用户允许查看自己应用程序的运行状态或者控制应用程序。此外,管理员可指定 队列管理员和集群系统管理员。
● 动态更新配置文件。管理员可根据需要动态修改配置参数以实现在线集群管理 Capacity Scheduler中每个队列可以限制资源使用量。队列间的资源分配以使用量作为 排列依据,使得容量小的队列有竞争优势。集群整体吞吐较大,延迟调度机制使得应 用可以有机会放弃跨机器或者跨机架的调度,争取本地调度。