Apache Hadoop YARN(Yet Another Resource Negotiator,另一种资源协调者)是一种新的Hadoop资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来的巨大的好处。
YARN是Hadoop2.0中的资源管理系统,它是一个通用的资源管理模块,可为各类应用程序提供资源管理和调度功能。
Yarn是轻量级弹性计算平台,除了MapReduce框架,还可以支持其他框架,如Spark、Storm等。
多种框架统一管理,共享集群资源的优点:
YARN的设计是为了解决MapReduce1.0中的一些缺陷。
Yarn架构思路:
三大组件的主要功能介绍:
(1)ResourceManager:
(2)ApplicationMaster:
(3)NodeManager:
ResourceManager(RM)是一个全局的资源管理器,负责整个系统的资源管理和分配,主要包括两个组件,即调度器(Scheduler)和应用程序管理器(Applications Manager)。
调度器接收来自ApplicationMaster的应用程序资源请求,把集群中的资源以“容器”的形式分配给提出申请的应用程序,容器的选择通常会考虑应用程序所要处理的数据的位置,进行就近选择,从而实现“计算向数据靠拢”。
容器(Container)作为动态资源分配单位,每个容器中都封装了一定数量的CPU、内存、磁盘等资源,从而限定每个应用程序可以使用的资源量。
调度器被设计成是一个可插拔的组件,YARN不仅自身提供了许多种直接可用的调度器,也允许用户根据自己的需求重新设计调度器。
应用程序管理器(Applications Manager)负责系统中所有应用程序的管理工作,主要包括应用程序提交、与调度器协商资源以启动ApplicationMaster、监控ApplicationMaster运行状态并在失败时重新启动等。
ResourceManager接收用户提交的作业,按照作业的上下文信息以及从NodeManager收集来的容器状态信息,启动调度过程,为用户作业启动一个ApplicationMaster。
ApplicationMaster的主要功能是:
(1)当用户作业提交时,ApplicationMaster与ResourceManager协商获取资源,ResourceManager会以容器的形式为ApplicationMaster分配资源;
(2)把获得的资源进一步分配给内部的各个任务(Map任务或Reduce任务),实现资源的“二次分配”;
(3)与NodeManager保持交互通信进行应用程序的启动、运行、监控和停止,监控申请到的资源的使用情况,对所有任务的执行进度和状态进行监控,并在任务发生失败时执行失败恢复(即重新申请资源重启任务);
(4)定时向ResourceManager发送“心跳”消息,报告资源的使用情况和应用的进度信息;
(5)当作业完成时,ApplicationMaster向ResourceManager注销容器,执行周期完成。
NodeManager是驻留在一个YARN集群中的每个节点上的代理,主要负责:
需要说明的是,NodeManager主要负责管理抽象的容器,只处理与容器相关的事情,而不具体负责每个任务(Map任务或Reduce任务)自身状态的管理,因为这些管理工作是由ApplicationMaster完成的,ApplicationMaster会通过不断与NodeManager通信来掌握各个任务的执行状态。
在集群部署方面,YARN的各个组件是和Hadoop集群中的其他组件进行统一部署的.
Yarn的工作流程如下:
从MapReduce1.0框架发展到YARN框架,客户端并没有发生变化,其大部分调用API及接口都保持兼容,因此,原来针对Hadoop1.0开发的代码不用做大的改动,就可以直接放到Hadoop2.0平台上运行。
总体而言,YARN相对于MapReduce1.0来说具有以下优势:
大大减少了承担中心服务功能的ResourceManager的资源消耗。
ApplicationMaster来完成需要大量资源消耗的任务调度和监控。
多个作业对应多个ApplicationMaster,实现了监控分布化。
MapReduce1.0既是一个计算框架,又是一个资源管理调度框架,但是,只能支持MapReduce编程模型。而YARN则是一个纯粹的资源调度管理框架,在它上面可以运行包括MapReduce在内的不同类型的计算框架,只要编程实现相应的ApplicationMaster。
YARN中的资源管理比MapReduce1.0更加高效。
以容器为单位,而不是以slot为单位。
YARN的目标就是实现“一个集群多个框架”。
一个企业当中同时存在各种不同的业务应用场景,需要采用不同的计算框架。
这些产品通常来自不同的开发团队,具有各自的资源调度管理机制。
为了避免不同类型应用之间互相干扰,企业就需要把内部的服务器拆分成多个集群,分别安装运行不同的计算框架,即“一个框架一个集群”。
导致问题
##Yarn HA:
Yarn中的ResourceManager负责整个集群的资源管理和任务调度,Yarn高可用性方案通过引入冗余的ResourceManager节点的方式,解决了ResourceManager单点故障问题。
当前Yarn支持内存和CPU两种资源类型的管理和分配。
每个NodeManager可分配的内存和CPU的数量可以通过配置选项设置(可在Yarn服务配置页面配置)。
容量调度器使得Hadoop应用能够共享的、多用户的、操作简便的运行在集群上,同时最大化集群的吞吐量和利用率。
容量调度器以队列为单位划分资源,每个队列都有资源使用的下限和上限。每个用户可以设定资源使用上限。管理员可以约束单个队列、用户或者作业的资源使用、支持作业优先级,但不支持抢占。
调度时,首先按照以下策略选择一个合适队列:
然后按以下策略选择该任务中一个任务:
队列的创建是在多租户页面,当创建一个租户关联Yarn服务时,会创建同名的队列。比如先创建QueueA,QueueB两个租户即对应Yarn两个队列。
队列的资源容量(百分比):
例如,有default,QueueA,QueueB三个队列,每个队列都有一个[队列名].capacity配置。
共享空闲资源:
每个用户最低资源保障(百分比)
任何时刻,一个队列中每个用户可使用的资源量均由一定的限制,当一个队列中同时运行多个用户的任务时,每个用户的可使用资源量在一个最小值与最大值之间浮动,其中,最大值取决于正在运行的任务数据,而最小值则由minimum-user-limit-percent决定。
例如:设置队列A的这个值为25,即yarn.scheduler.capacity.root.AueueA.minimum-user-limit-percent=25,那么随着任务的用户增加,队列资源的调整如下:
每个用户最多可使用的资源量(所在队列容量的倍数)
queue容量的倍数,用来设置一个user可以获取更多的资源。yarn.scheduler.capacity.root.QueueD.user-limit-factor=1.默认值为1,表示一个user获取的资源容量不能超过queue配置的capacity,无论集群有多少空闲字眼,最多不超过maximum-capacity。
常用性能调优参数:
以上内容为听华为大数据培训课程和大学MOOC上厦门大学 林子雨的《大数据技术原理与应用》课程而整理的笔记。
大数据技术原理与应用: https://www.icourse163.org/course/XMU-1002335004