了解YARN
一、什么是YARN?
Apache Hadoop YARN (Yet Another Resource Negotiator,另一种资源协调者)是一种新的 Hadoop 资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。
二、产生背景
1.MRv1的架构:
2.MRv1(Hadoop1.0)具有各种局限性:
(1)扩展性差:在MRv1中,jobTracker同时具有资源管理和作业控制的两个功能,这制约了hadoop集群的扩展性。
(2)可靠性差::MRv1采用了Master/Slave结构,其中Master存在单点故障问题,一旦它出现故障将导
致整个集群不可用。
(3)资源利用率低:基于slot的资源划分方法划分粒度仍过于粗糙,往往会造成节点资源利用率过高或者过低;Hadoop将槽位分为Map Slot和Reduce Slot两种,且不允许它们之间共享, 常常会导致一种槽位资源紧张而另外一种闲置(比如一个作业刚刚提交时,只会运行Map Task,此时Reduce Slot闲置)。
(4)没引入有效的资源隔离机制,仅采用了基于jvm的资源隔离机制,这种方式仍过于粗糙,很多资源,比如CPU,无法进行隔离,这会造成同一个节点上的任务之间干扰严重。
(5)无法支持多种计算框架:不能有效的支持Storm、Spark等计算框架。
3.YARN的改进
(1)改变一个计算框架一个集群的模式,使用各个计算框架对资源共享的模式
提高资源利用率;共享模式只需要少数管理员统一管理一个集群即可;使资源的调度不用跨集群,节约了成本。
(2)在Hadoop 1.0中JobTracker主要完成两项功能:资源的管理和作业控制。在集群规模过大的场景下,JobTracker压力过重,因此在YARN的设计中,资源的管理和作业控制是分离开的。取代JobTracker的是ResourceManager、ApplicationMaster、NodeManager三个部分。
三、主要优点
1.大大减小了 JobTracker(也就是现在的 ResourceManager)的资源消耗,并且让监测每一个 Job 子任务 (tasks) 状态的程序分布式化了,更安全、更优美。
2.在新的Yarn中,ApplicationMaster是一个可变更的部分,用户可以对不同的编程模型写自己的AppMst,让更多类型的编程模型能够跑在Hadoop集群中。
3.对于资源的表示以内存为单位,比之前以剩余slot数目更加合理。
4.ApplicationMaster承担了原本JobTracker的监控任务运行状况的工作,ResourceManager中的ASM控制ApplicationMaster的运行状况,如果出现问题,将会对其(ApplicationMaster)进行重启。
5.Container用来作为YARN的一个资源隔离组件,可以用来对资源进行调度和控制。Container是资源分配的单位,其内部封装了节点的多维度资源。
四、YARN的基本架构
1.ResourceManager(RM):
(1)负责整个系统资源管理和分配,包括调度器和应用程序管理器(Applications Manager)ASM两部分。
(2)调度器是一个纯的调度器,只负责资源分配。
(3)ASM:①用于应用提交,启动ApplicationMaster;②启动AM;③监控AM的运行状态,在AM运行失败时重新启动它。
2.NodeManager(NM):
(1)每个节点上的资源和任务管理器
(2)详细功能(承上启下):①定时向RM汇报本节点的资源使用情况和各个Container的运行情况;②接收AM中(各个任务)Container的启停请求。
3.ApplicationMaster(AM):
(1)每个应用程序对应一个AM
(2)具体功能:①向RM请求资源;②与NM进行通信来启停任务;③监控所有任务的运行状态,并在任务失败时重新为任务申请资源并重启。
4.Container:
是YARN的资源抽象,资源分配的单位,其中封装了节点的多维度资源,如内容、CPU等。
五、YARN的工作调度流程
1.client向RM发出应用程序启动请求(内容包括:ApplicationMaster程序,启动AM的命令、应用程序)
2.RM为应用程序分配一个Container,并与对应的NM进行通信,要求NM在Container中启动应用程序对应的AM。
3.AM启动后向RM注册,用户可以直接通过RM查看应用程序的运行状态。
4.AM通过轮询的方式向RM申请和领取资源
5.AM请求到资源后,与对应的NM进行通信,要求NM启动任务。
6.NM为任务设置好任务运行所需要的环境(包括环境变量、JAR包等)后,将任务启动命令写入脚本,通过运行脚本来启动任务。
7.各个任务通过RPC协议向AM发送自身的运行状况,可以使AM随时掌握任务的情况,从而可以在任务失败时重启任务。
8.任务完成后,AM向RM注销并关闭自己。
六、YARN的容错机制
1.RM的单点故障
ResourceManager有备份节点,当主节点出现故障,将切换到从节点继续工作。
2.NM
(1)任务失败后,RM将失败的任务告诉AM;
(2)AM决定如何去处理失败的任务。
3.AM
(1)AM失败后,由RM负责重启AM
(2)AM需要处理内部任务的容错问题
(3)RM会保存已经运行的task,重启后无需重新运行。
七、YARN的调度器
资源调度器是YARN中最核心的组件之一,且是插拔式的,它定义了一整套接口规范以便用户可按照需要实现自己的 调度器。YARN自带了FIFO、Capacity Scheduler(默认)【队列内部默认的任务执行方式是FIFO】和Fair Scheduler三种常用资源调度器,当然,用户可按照接口规范编写 一个新的资源调度器,并通过简单的配置使它运行起来。
1.资源调度模型:
(1)YARN采用了双层资源调度模型:在第一层中,ResourceManager中的资源调度器将资源分配给各个 ApplicationMaster;在第二层中,ApplicationMaster再进一步将资源分配给它内部的各个任务。这里资源 调度器主要关注的是第一层的调度问题,至于第二层的调度策略,完全由用户应用程序自己决定。
(2)YARN采用的是pull-base通信模型:资源调度器将资源分配给一个应用程 序后,它不会立刻push给对应的ApplicationMaster,而是暂时放到一个缓冲区中,等待ApplicationMaster 通过周期性的心跳主动来取。
2.资源调度过程
3.资源保证机制
(1)增量资源分配:当应用程序申请的资源暂时无法保证时,是优先为应用程序预留一个节点上的资源直到累计释放的空闲资源满足应用程序的需求。这种资源分配方式,预留资源会造成资源的浪费,降低集群资源利用率。
(2)YARN采用增量资源分配机制,尽管这种机制会造成浪费,但不会造成饿死现象。(假设应用程序不会永久占用某个资源,它会在一定时间内释放占用的资源)。
4.资源抢占机制
(1)在资源调度器中,每个队列可设置一个最小资源量和最大资源量,其中,最小资源量是资源紧缺情况
下每个队列需保证的资源量,而最大资源量则是极端情况下队列也不能超过的资源使用量。
(2)资源抢占发生的原因则完全是由于“最小资源量”这一概念。通常而言,为了提高资源利用率,资源
调度器(包括Capacity Scheduler和Fair Scheduler)会将负载较轻的队列的资源暂时分配给负载重的队列(即最小资源量并不是硬资源保证,当队列不需要任何资源时,并不会满足它的最小资源量,而是暂时
将空闲资源分配给其他需要资源的队列),仅当负载较轻队列突然收到新提交的应用程序时,调度器才
进一步将本属于该队列的资源分配给它。。但由于此时资源可能正被其他队列使用,因此调度器必须等待
其他队列释放资源后,才能将这些资源“物归原主”,这通常需要一段不确定的等待时间。为了防止应
用程序等待时间过长,调度器等待一段时间后若发现资源并未得到释放,则进行资源抢占。
5.Capacity Shedule
以队列为单位划分资源,每个队列可设定一定比例的资源最低保 证和使用上限,同时,每个用户也可设定一定的资源使用上限以防止资源滥用。而当一个队列的资源有剩余时,可暂时将剩余资源共享给其他队列。
(1).特点:容量保证、灵活性、多种租赁(支持多用户共享集群和多应用程序的同时运行)、安全保障、动态资源更新
(2)子队列:
①队列可以嵌套、每个队列都有子队列。
②用户只能将应用程序提交到最底层队列(叶子队列)
③每个队列配置最小和最大容量。
④调度器总会选择当前资源使用率最低的队列,并为之分配资源。