YARN原理与架构

一、YARN原理与组件构成

1.YARN概述

      YARN(Yet Another Resource Negotiator的缩写)是Hadoop中用于进行集群资源管理的重要组件。在大型集群中实现高效数据计算的前提是,如何能够在成千上万个服务器间对集群资源进行整体分配和有效管理,集群资源主要包括CPU核心数、内存容量、硬盘容量和网络带宽等。YARN的出现让整体集群资源高效分配利用成为了可能,通过YARN可以对集群资源进行整体调度和管理。当集群接收计算作业任务时,将以每个计算作业任务为对象来为其分配集群资源; 计算作业任务执行完毕后可以及时回收集群资源。

      按Hadoop官网介绍,YARN的基本设计思路是将集群计算资源管理、计算作业调度/监视划分为两个功能,分别交由两个相互独立的守护进程进行管理。

      为实现该思路需在集群中配置一个负责集群资源管理的全局资源管理器ResourceManager (RM) ,为每个计算作业任务配置一个负责计算作业任务调度/监视的独立的应用控制器ApplicationMaster (APP Mstr),此处的计算作业任务既可以是单个作业,也可以是由多个作业构成的有向无环图(DAG of jobs)。

(1)YARN原理

      如下图所示,当Client向Hadoop集群发起计算作业任务请求时,为能够顺利完成该任务,集群需要为其分配合适的计算资源。

      YARN在接收到计算作业任务的资源请求时,ResourceManager负责根据集群资源现状为新任务分配资源,而Node Manager作为ResourceManager在节点(Node)上的代理,负责管理其所在节点的容器,监视容器资源(如CPU、内存、磁盘、网络)的使用情况,并定期向ResourceManager汇报相关信息。节点(Node)上的ApplicationMaster主要是负责根据计算作业任务的资源需求向ResourceManager申请资源,并和Node Manager协同工作来执行和监视计算作业任务的执行,而节点上的容器Container是执行计算作业的基本单元。

(2)YARN的特点

      最初,Hadoop引入YARN是为了改善集群执行MapReduce任务时的资源分配效率问题,目前YARN已经发展成一个相对完整的集群资源管理工具。在应用层面,YARN具有一定的通用性,同样能够应用在其他分布式计算模式,具有如下主要特点。

  • 分布式资源管理。YARN可以在集群中对整体资源进行有效管理。

  • 多框架支持。目前YARN不但支持MapReduce计算模式,还支持其他分布式计算模式,比如Spark、Flink等。

  • 灵活的资源调度。YARN能够根据应用的需求和集群的状态,进行动态的资源调度。

  • 高可靠性和容错性。当某个计算节点执行失败时,YARN能够自动将该节点上的计算任务重新分配给其他节点,保证任务能够正常运行完成。

  • 可扩展性。随着数据量和计算作业任务需求的不断增长,运维工程师可以方便地增加更多的节点来扩展集群的规模。

  • 安全性。YARN提供了多种安全机制,确保数据和应用的安全,比如Kerberos认证、TLS/SSL加密、容器资源隔离等。

2.YARN整体架构

      YARN由一个资源管理器ResourceManager和多个节点管理器Node Manager组件构成。其中,ResourceManager是整个集群中拥有最高权限的全局决策者,负责响应Client的请求,按既定规则为计算作业任务分配集群资源;而每个计算节点(Node)上都会部署Node Manager作为ResourceManager在该节点的代理,负责管理所在节点的容器(Container),监视容器各项资源(如CPU、内存、硬盘、网络)的使用情况,定期将收集到的信息汇报给ResourceManager。

      从整体架构上看,YARN属于Master-Slavers模型,主要依赖于两个组件相互配合来实现其资源管理功能:

  • ResourceManager是集群资源的管理者,属于Master角色,包括两个子组件:一个是支持可插拔策略的调度器Scheduler,一个是负责接收计算作业任务并启动/监视应用控制器ApplicationMaster的应用管理器ApplicationsManager。 

  • NodeManager是ResourceManager在计算节点上的代理,属于Slaver角色,包括两个子组件:一个是负责管理节点中具体计算作业任务的应用控制器ApplicationMaster,一个是负责执行实际计算作业任务的容器Container。

(1)ResourceManager

     资源管理器ResourceManager是集群中拥有最高权限的全局决策者,负责给集群中的所有应用程序分配资源,在接收到Client的计算作业任务请求时按既定机制为该任务分配合适的集群资源。因此ResourceManager的主要职责在于资源调度,即ResourceManager会根据集群的可用资源、计算作业的资源需求以及优先级等,为各个任务动态的分配资源,但ResourceManager并不负责每个计算作业任务的状态管理。为实现集群资源的调度和有效管理,ResourceManager上的ApplicationsManager需要协同NodeManager和ApplicationMaster一起工作。整体来看,资源管理器ResourceManager的工作职责包括如下五点:

  • 资源管理。ResourceManager负责整个集群的资源分配和管理。它维护了一个全局的资源池,并根据计算作业任务的需求和优先级,动态地分配和调整资源。

  • 应用程序调度。ResourceManager负责计算作业任务的调度。当计算作业任务提交到集群时,ResourceManager会根据计算作业任务的需求和集群的资源状况,为其分配相应的资源。

  • 应用程序监控。ResourceManager还负责监控计算作业任务的运行状态。它会定期收集计算作业任务的运行数据,并根据需要进行调整和优化。

  • 资源隔离。为了确保不同任务之间的资源隔离,ResourceManager会使用各种机制,如容器隔离、进程隔离等,来确保每个计算作业任务都能独立运行,不受其他任务影响。

  • 负载均衡。ResourceManager还会负责负载均衡,确保集群中的资源得到充分利用。当某个节点的负载过高时,ResourceManager会根据负载情况,将该节点上的某些任务调度到其他负载较轻的节点上。

      为确保Hadoop集群的高效运行,为计算作业任务提供稳定、可靠的资源支持,资源管理器ResourceManager的具体工作将交由调度器Scheduler和应用管理器ApplicationsManager两个组件负责。调度器Scheduler负责协调集群中各个作业的资源分配,保障整个集群的运行效率。应用管理器ApplicationsManager则负责向调度器申请合适的资源容器,并追踪和监视NodeManager中ApplicationMaster的状态。

Scheduler

      调度器Scheduler是一个支持可插拔策略的组件,负责为正在运行的作业任务分配资源。目前YARN提供三种调度器:先进先出调度器(FIFO Scheduler)、容量调度器(Capacity Scheduler)和公平调度(Fair Scheduler)。需要强调的是,组件Scheduler只是一个纯粹的调度器,并不负责计算作业任务状态的监视和追踪,而且它也不负责重启由于程序故障或硬件故障导致失败的计算作业任务。调度器Scheduler是基于容器(Container)来实现集群资源调度的

ApplicationsManager

     应用管理器ApplicationsManager主要负责接收计算作业任务请求,根据Scheduler分配的第一个容器(Container)来启动应用控制器ApplicationMaster,并监控ApplicationMaster的运行状态,在ApplicationMaster运行失败时重启。同样ApplicationsManager同样不负责具体计算作业任务状态的监视和追踪,只是监视和追踪ApplicationMaster。

(2)NodeManager

      NodeManager是ResourceManager在计算节点上的代理,负责管理各自所在节点的容器,监视容器资源(如CPU、内存、硬盘、网络等)的使用情况,定期将收集到的资源使用信息汇报给ResourceManager。

      NodeManager在启动时会向ResourceManager注册,然后定期向ResourceManager发送心跳包,让ResourceManager能够及时了解NodeManager的运行状态,等待来自ResourceManager的指令,此过程的主要目的是让ResourceManager能够及时高效的管理各个节点容器的使用情况。因此NodeManager只负责管理自身的容器(Container),并不关注运行在容器Container上的计算作业任务的具体信息。为确保NodeManager们和ResourceManager能够高效的协同工作,各节点及其容器信息会不断被更新至ResourceManager,以保障整个集群能够随时发挥出最佳状态。简单来说,NodeManager的工作职责包括如下几点。

  • 管理其所在的计算节点,与ResourceManager保持通信。

  • 管理容器Container的生命周期,包括接收并执行来自ApplicationMaster的关于容器操作的命令,如启动、重启和停止等。

  • 监视每个容器Container的资源使用情况,如CPU、内存、硬盘和网络等。

  • 监视其所在计算节点的健康状况,将监测到的信息汇报给ResourceManager,接收并执行来自ResourceManager的关于容器操作的命令,例如清理容器。

  • 管理日志以及不同作业任务用到的附属服务。

      NodeManager为实现以上工作职能,需要两个子组件相互协作。分别是负责管理计算作业任务的应用控制器ApplicationMaster,和负责执行实际计算作业任务的容器Container。

ApplicationMaster

      应用控制器ApplicationMaster作为计算作业任务的管理者,负责根据计算作业任务的资源需求与ResourceManager的Scheduler协商合适数量的容器Container,同时负责跟踪和监视任务的执行状态与运行进度。每个计算作业任务都会有一个对应的ApplicationMaster,YARN在接收到计算作业任务申请时,应用管理器ApplicationsManager与Scheduler协商第一个容器Container来运行ApplicationMaster。ApplicationMaster启动后与ResourceManager协商资源,与NodeManager协同工作来启动任务和监视任务执行过程的状态。

      ApplicationMaster运行过程中,将会定期向ResourceManager发送心跳报告来确认其健康状态和计算作业任务的资源需求。ResourceManager会根据ApplicationMaster汇报的心跳报告来动态分配容器(Container),为ApplicationMaster绑定包含一定数量的容器(Container)的租约,ApplicationMaster会根据其自身的执行计划来适应容器(Container)的不足或过剩,同样也会动态的申请或释放容器(Container)。

Container

      容器Container是YARN上一种关于资源的抽象概念。简单理解,容器就是一组集群资源的集合,这里所说的资源主要包括CPU和内存容量(日后可能会增加磁盘、网络、GPU等)。容器Container类似虚拟软件VMware上的虚拟机,创建虚拟机时需要给虚拟机配置CPU的核心数、内存的容量、硬盘的容量等。在计算集群中,一个计算节点可以运行多个容器,但一个容器只能存在于一个计算节点中,即容器不能跨计算节点存在。目前容器Container的状态主要是由NodeManager监视,而资源则受ResourceManager调度。

       容器Container是执行某个计算作业任务(Task)的最小单元,例如MapReduce任务中的MapTask、ReduceTask都是在容器中运行。其实NodeManager的ApplicationMaster也是运行在容器上的,每个计算作业任务从ApplicationMaster开始,ApplicationMaster启动后就会根据计算作业任务的资源需求向ResourceManager申请更多的Container来完成该任务,在运行过程中会根据需求来动态申请或释放Container。

3.YARN与HDFS关系

     Hadoop作为一个开源的分布式计算框架,用于处理和分析大规模数据集,为了能够提供可靠的、可扩展的分布式存储和计算能力,使得开发人员能够轻松地处理PB级别的数据,离不开Hadoop的三大核心组件包括HDFS、YARN和MapReduce。

  • HDFS是一个分布式文件系统,被设计用于存储大规模的数据文件,可以运行在廉价的商用服务器上,通过增加节点进行水平扩展。HDFS包括两个子组件:NameNode负责管理文件系统的元数据,如目录树、文件和目录的权限信息等;DataNode用于存储实际的数据块,并与NameNode进行通信。

  • YARN是Hadoop的资源管理系统,负责集群资源的统一管理和调度。YARN包括两个组件:ResourceManager负责集群全局资源的管理和调度,分配和监视Container的资源使用;NodeManager负责管理节点上的资源,启动和监视Container的运行状态。

  • MapReduce是Hadoop的编程模型,用于大规模数据集的并行运算。将数据处理任务分解成三个阶段:Map阶段、Shuffle阶段和Reduce阶段,有效提升大规模数据处理和分析的效率。

     综上可以发现YARN和HDFS是Hadoop生态系统中的两个重要组件,两个组件各自负责不同的功能。从Hadoop集群角度看,YARN与HDFS是相互配合使用,YARN负责管理分布式计算资源,而HDFS负责存储海量数据。YARN可以在HDFS集群上运行,从而实现对计算资源的统一管理和调度。而且YARN和HDFS之间会存在通信接口,用于实现它们之间的信息交互和资源协调。从功能角度分析,YARN和HDFS之间存在明显的区别:1)YARN是Hadoop的资源管理系统,负责分配和管理集群的计算资源;HDFS是一个分布式文件系统,用于存储海量数据。2)YARN和HDFS虽然同是采用Master/Slave架构,但YARN的主节点ResourceManager负责全局的资源管理和调度,HDFS的主节点NameNode负责管理文件系统的元数据。3)YARN适用于运行各种分布式计算任务(如MapReduce、Spark、Flink等),HDFS适用于存储大规模数据集并进行离线分析和处理

图片

图3-4 YARN与HDFS

总的来说,YARN和HDFS是Hadoop生态系统中的两个重要组件,它们各自具有独特的功能和架构。YARN负责管理分布式计算资源,而HDFS负责存储海量数据。它们相互依赖、协同工作,为大数据处理和分析提供了强大的支持。

4.YARN组件工作流程

     YARN作为Hadoop的资源管理系统,其主要功能是分配和管理集群的计算资源。它负责接收来自客户端Client关于计算作业任务的资源请求,并根据集群的当前状态和资源需求进行资源分配。据Hadoop官网介绍,YARN的基本设计思路是将集群资源管理系统划分为多个相互独立的更小规模的功能组件,分别交由相互独立的守护进程进行管理。职责分明的功能组件相互配合,保障集群资源能够得到充分且高效的利用。为完成计算作业任务,图3-5展示了YARN各组件间的工作流程。

  1. 客户端Client向资源管理器ResourceManager提交计算作业任务(job)请求,申请job id。

  2. 资源管理器ResourceManager给客户端Client返回资源路径和job id,此处的资源路径主要用于存放执行job所需的各种资料,如Jar包、Configuration信息、InputSplit(数据分片信息)等。

  3. 客户端Client将job所需的各种资料提交到资源管理器ResourceManager指定的资源路径。

  4. 客户端Client向资源管理器ResourceManager发送执行job请求,资源管理器ResourceManager中的应用管理器ApplicationsManager负责接收提交过来的job信息。

  5. 应用管理器ApplicationsManager将job的提交信息添加到调度器Scheduler中,由调度器Scheduler为该job安排空闲的计算节点Node及容器Container。

  6. 调度器Scheduler将空闲的计算节点Node及容器Container的信息(如NodeId、ContainerId)通知应用管理器ApplicationsManager。

  7. 应用管理器ApplicationsManager根据调度器Scheduler提供的信息找到相应节点,与该节点NodeManager协同开辟容器Container来启动该job的应用控制器ApplicationMaster。

  8. 应用控制器ApplicationMaster从HDFS上(job资料路径)获取执行该job所需的各种资料,根据job相关的程序代码(如MapReduce的jar包)生成Task。

  9. 应用控制器ApplicationMaster向资源管理器ResourceManager申请执行Task需要的容器Container。

  10. 资源管理器ResourceManager的Scheduler将根据任务Task所需资源及当前集群资源使用情况,向空闲的计算节点NodeManager分派任务Task,NodeManager负责创建用于执行任务Task的容器Container。

  11. 应用控制器ApplicationMaster通知相关的计算节点NodeManager启动执行Task。

  12. NodeManager启动容器Container执行任务Task,应用控制器ApplicationMaster负责监视容器Container的执行状态和进度,任务执行完毕后应用控制器ApplicationMaster向资源管理器ResourceManager申请注销并关闭容器Container。

图片

图3-5 YARN组件工作流程

为方便读者对YARN工作流程有更清晰的了解和认知,现将以上工作流程中各功能组件的工作职能整理如下表。

表3-6 YARN组件工作流程中职责说明

图片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值