Apache Hadoop YARN (Yet Another Resource Negotiator ,另一种资源协调者)是一种新的Hadoop资源管理器。
YARN是一种通用资源管理系统和调度平台,可为上层应用提供统一的资源管理和调度。
他的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。
如何理解YARN是一个通用的资源管理系统和调度平台
YARN功能说明
资源管理系统:集群的硬件资源,如程序运行相关,比如内存,CPU等。
调度平台:多个程序同时申请计算资源如何分配,调度的规则(算法)。
通用:不仅支持MapReduce程序,理论上支持各种计算程序。YARN不关心你干什么,只关心你要资源,在有的情况下给你,用完之后还我。
YARN概述
可以把Hadoop YARN理解为相当于一个分布式的操作系统平台,而MapReduce等计算程序相当于运行于操作系统之上的应用程序,YARN为这些程序提供运算所需的资源(内存、CPU等)。
Hadoop能有今天的地位,YARN可以说是功不可没。因为有了YARN,更多计算框架可以接入到HDFS中,而不单单是MapReduce,正是因为YARN的包容,使得其他计算框架能专注于计算性能的提升。
HDFS可能不是最优秀的大数据存储系统,但却是应用最广泛的大数据存储系统,YARN功不可没
官方架构
官方架构图中出现的概念
YARN三大组件
ResourceManager(RM)
YARN集群中的主角色,决定系统中所有应用程序之间资源分配的最终权限,即最终仲裁者。
接受用户的作业提交,并通过NM分配、管理各个及其上的计算资源。
NodeManager(NM)
YARN中的从角色,每个节点都会部署,负责管理本机器上的计算资源。
根据RM命令,启动Container容器,监视容器的资源使用情况。并且向RM主角色汇报资源使用情况。
ApplicationMaster(AM)
随程序存在,如果YARN上没有运行任何程序,则不存在
用户提交的每个应用程序均包含一个AM。
是任何程序在YARN上启动时的第一个程序
应用程序内的管理者,负责程序内部各个阶段的资源申请,监督程序的执行情况。
核心交互流程
MR作业提交 :Client(客户端)向RM提交数据
资源的申请:MrAPPMaster向RM申请资源
MR作业状态汇报:Container(Map Task、Reduce Task)向Container(MrAppMaster)
节点的状态汇报:NM向RM发送
整体概述
当用户向YARN中提交一个应用程序后,YARN将分两个阶段运行该应用程序。
第一个阶段是客户端申请资源启动运行本次程序的ApplicationMaster;
第二个是由ApplicationMaster根据本次程序内部具体情况,为它申请资源,并监控它的整个运行过程,直到运行完成
MR提交YARN交互流程(YARN程序生命周期)
第1步:用户通过客户端向YARN中ResourceManager提交应用程序(如hadoop jar提交MR程序);
第2步:ResourceManager为该应用程序分配第一个Container(容器),并与对应的NodeManager通信,要求他在这个Container中启动这个应用程序的ApplicationMaster。
第3步:ApplicationMaster启动成功之后,首先向ResourceManager注册并保持通信,这样用户可以直接通过ResourceManage查看应用程序的运行状态(任务处理进度);
第4步:AM为本次程序内部的各个Task任务向RM申请资源,并监控它的运行状态;
第5步:一旦ApplicationMaster申请到资源后,便与对应的NodeManager通信,要求它启动任务;
第6步:NodeManager为任务设置好运行环境后,将任务启动命令写道一个脚本中,并通过运行该脚本启动任务;
第7步:各个任务通过某个RPC协议向ApplicationMaster汇报自己的状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。在应用程序运行过程中,用户可随时通过RPC向ApplicationMaster查询应用程序的当前运行状态;
第8步:应用程序运行完成后,ApplicationMaster向ResourceManager注销并关闭自己;
YARN资源调度器Scheduler
如何理解资源调度
在理想情况之下,应用程序提出的请求将立刻得到YARN批准,但实际中,资源是有限的,并且在繁忙的集群上,应用程序通常将需要等待某些请求得到满足。YARN调度程序的工作是根据一些定义的策略为应用程序分配资源。
在YARN中,负责给应用分配资源的就是Scheduler,他是ResourceManager的核心组件之一。Scheduler完全专用于调度任务,它无法跟踪应用程序的状态。
一般而言,调度是一个难题,并且没有一个“最佳”策略,为此,YARN提供了多种调度器和可配置的策略供选择
调度器策略
三种调度器
FIFO Scheduler(先进先出调度器),Capacity Scheduler(容器调度器)、Fair Scheduler(公平调度器)。
Apache版本YARN默认使用Capacity Scheduler。
如果需要使用其他的调度器,可以在yarn-site.xml中的yarn.resourcemanager.scheduler.class进行配置
FIFO Scheduler概述
FIFO Scheduler是Hadoop1.x中JobTracker原有的调度器实现,此调度器在YARN中保留了下来。
FIFO Scheduler是一个先进先出思想,即先提交的应用先运行。调度工作不考虑优先级和范围,适用于负载较低的小规模集群。当使用大型共享集群时,他的效率较低会导致一些问题。
FIFO Scheduler拥有一个控制全局的队列queue,默认queue名称为default,该调度器会获取当前集群上所有的资源信息作用于这个全局的queue。
FIFO Scheduler优势、坏处
优势:无需配置、先到先得、易于执行
坏处:任务的优先级不会变高,因此高优先级的作业需要等待,不适合用于共享集群
Capacity Scheduler概述
Capacity Scheduler容量调度是Apache Hadoop3.x默认调度策略。该策略允许多个组织共享整个集群资源,每个组织可以获得集群的一部分计算能力。通过为每个组织分配专门的队列,然后再为每个队列分配一定的集群资源,这样整个集群就可以通过设置多个队列的方式给多个组织提供服务了。
Capacity可以理解成一个个的资源队列,这个资源队列是用户自己分配的,队列内部又可以垂直划分,这样一个组织内部的多个成员就可以共享这个队列资源了,在一个队列内部,资源的调度是采用的先进先出(FIFO)策略。
Capacity Scheduler资源队列划分
Capacity Scheduler调度器以队列为单位划分资源。简单通俗来说,就是一个个队列由独立的资源,队列的结构和资源是可以进行配置的。
Capacity Scheduler特性优势
层次化的队列设计(Hierarchica Qeues)
参差化管理,可以更同意、更合理分配和限制资源的使用。
容量保证(Capacity Fuarantses)
每个队列上都可以设置一个资源的占比,保证每个队列都不会占用整个集群的资源。
安全(Security)
每个队列由严格的访问控制。用户只能向自己的队列里面提交任务,而且不能修改或者访问其他队列的任务。
弹性分配(Elasticity)
空闲的资源可以被分配给任何队列。
当多个队列出现争用的时候,则会按照权重比例进行平衡
Fair Scheduler概述
Fair Scheduler叫做公平调度,提供了YARN应用程序公平地共享大型集群中资源的另一种方式。使所有应用在平均情况下随着时间的流逝可以获得相等的资源份额。
Fair Scheduler设计目标是为所有的应用分配公平的资源(对公平的定义通过参数来实现)。
公平调度可以在多个队列间工作,允许资源共享和抢占。
如何理解公平共享
有两个用户A和B,每个用户都有自己的队列。
A启动一个作业,由于没有B的需求,它分配了集群所有可用资源。
然后B在A的作业仍在运行时启动了一个作业,经过一段时间,A、B各自任务都使用了一般的资源。
现在,如果B用户在其他作业仍在运行时开始第二个任务,他将与B的另一个作业共享其资源,因此B的每个作业都拥有资源的四分之一,而A将继续拥有一半的资源,结果是资源在用户之间公平的共享
Fair Scheduler特性优势
分层队列:队列可以按层次结构排列划分资源,并可以配置权重以按特定比例共享集群。
基于用户或组的队列映射:可以根据提交任务的用户名或组来分配队列。如果任务特定了一个队列,则在该队列中提交任务。
资源抢占:根据应用的配置,抢占和分配资源可以是友好的或是强制的。默认不启用资源抢占。