TypechoJoeTheme

IT技术分享

统计

04. YARN资源管理系统——大数据专栏

2022-07-22
/
0 评论
/
810 阅读
/
正在检测是否收录...
07/22

YARN的概念

Apache Hadoop另一种资源协调者(Yet Another Resource Negotiator, YARN)是一种新的Hadoop资源管理器,它是一个通用的资源管理系统,可为上层应用提供统一的资源管理和调度服务,它的引入为集群在资源利用、资源的统一管理调度和数据共享等方面带来了巨大的好处。

YARN并不完全是下一代MapReduce(MRv2),因为下一代MapReduce与第一代MapReduce(MRv1)在编程接口、数据处理引擎(MapTask和ReduceTask)是完全一样的,可以认为MRv2重用了MRv1的这些模块,不同的是资源管理和作业管理系统。
  • MRv1中资源管理和作业管理均是由JobTracker实现的,集两个功能于一身
  • 在MRv2中,将这两部分分开了,其中,作业管理由ApplicationMaster实现,而资源管理由新增系统YARN完成。

由于YARN具有通用性,因此YARN也可以作为其他计算框架的资源管理系统,比如Spark、Flink等,不仅限于MapReduce。

通常而言,一般将运行在YARN上的计算框架称为“X on YARN”,比如“MapReduce On YARN”“Spark On YARN”“Flink On YARN”等

YARN的作用

YARN作为一种通用的资源管理系统,为上层应用提供统一的资源管理和调度。

可以让上层的多种计算模型(比如MapReduce、Hive、Storm、Spark等)共享整个集群资源,提高集群的资源利用率,而且还可以实现多种计算模型之间的数据共享。

YARN基本架构

YARN主要是由资源管理器(ResourceManager)、应用程序管理器(ApplicationMaster)、节点管理器(NodeManager)和相应的容器(Container)构成的。每个组件的作用如下。

ResourceManager

是一个全局的资源管理器,它负责整个系统的资源管理和调度,主要由两个组件构成:一个是资源调度器(ResourceScheduler),另一个是全局应用程序管理器(ApplicationsManager)。

  • 资源调度器

资源调度器(ResourceScheduler)是一个纯调度器,它不从事任何与应用程序相关的工作,它将系统中的资源分配给各个正在运行中的程序,它不负责监控或跟踪应用的执行状态,也不负责重新启动因应用程序失败或硬件故障而导致的失败任务。这些都由应用程序对应的全局应用程序管理器完成。

资源调度器是一个可插拔的组件,用户可以根据自己的需要设计新的资源调度器,YARN提供了很多可以直接使用的资源调度器。

  • 全局应用程序管理器

全局应用程序管理器(ApplicationsManager)负责整个系统中所有应用程序的管理,包括应用程序的提交,与资源调度器协商资源来启动应用程序管理器,监控应用程序管理器的运行状态,并在失败时发出通知等,具体的任务则交给应用程序管理器去管理,相当于一个项目经理的角色

ApplicationMaster

用户提交的每一个应用程序都包含一个应用程序管理器(ApplicationMaster)。

应用程序管理器主要是与资源管理器协商获取资源,并将得到的资源分配给内部具体的任务,应用程序管理器负责与节点管理器通信以启动或停止具体的任务,并监控该应用程序所有任务的运行状态,当任务运行失败时,重新为任务申请资源并重启任务。

NodeManager

节点管理器(NodeManager)作为YARN主从架构的从节点,是整个作业运行的执行者。

节点管理器是每个节点上的资源和任务管理器,它会定时向资源管理器汇报本节点的资源使用情况和各个容器(这是一个动态的资源单位)的运行状态,并且接收、处理来自应用程序管理器的容器启动和停止等请求。

Container

容器(Container)是对资源的抽象,它封装了节点的多维度资源,比如封装了内存、CPU、磁盘、网络。

当应用程序管理器向资源管理器申请资源时,资源管理器为应用程序管理器返回的资源是一个容器,得到资源的任务只能使用该容器所封装的资源,容器是根据应用程序需求动态生成的。

YARN的工作原理

YARN上运行的应用程序

  • 短应用程序

是指一定时间内(可能是秒级、分钟级或小时级,尽管天级或更长的时间也存在,但非常少)可运行完成并正常退出的应用程序,比如MapReduce作业、Tez DAG作业等。

  • 长应用程序

是指不出意外,永不终止运行的应用程序,通常是一些服务,比如Storm Service(主要包括Nimbus和Supervisor两类服务)、HBase Service(包括Hmaster和RegionServer两类服务)等,而它们本身作为一个框架提供了编程接口供用户使用。

YARN的工作流程

(1) 客户端(Client)向资源管理器(ResourceManager)提交一个作业,作业包括应用程序管理器(ApplicationMaster)程序,启动应用程序管理器的程序和用户程序(比如MapReduce)。

(2) 资源管理器会为该应用程序分配一个容器(Container),它首先会与节点管理器进行通信,要求它在此容器中启动应用程序的应用程序管理器。

(3) 应用程序管理器一旦启动,它首先会向资源管理器注册,这样用户可以直接通过资源管理器查看应用程序的运行状态,然后它将为各个任务申请资源并监控它们的运行状态,直到运行结束。它会以轮询的方式,通过RPC协议向资源管理器申请和领取资源,一旦应用程序管理器申请到资源,它会和节点管理器通信,要求它启动并运行任务。

(4) 各个任务通过RPC协议向应用程序管理器汇报自己的状态和进度,这样会让应用程序管理器随时掌握各个任务的运行状态,一旦任务运行失败,应用程序管理器就会重启该任务,重新申请资源。

应用程序运行完成后,应用程序管理器就会向资源管理器注销并关闭此任务。在应用程序整个运行过程中可以用RPC向应用程序管理器查询应用程序当前的运行状态,在Web上也可以看到整个作业的运行状态。

MapReduce on YARN工作流程

(1) 用户向资源管理器提交作业,作业包括MapReduce应用程序管理器,启动MapReduce应用程序管理器的程序和用户自己编写的MapReduce程序。用户提交的所有作业都由全局应用程序管理器管理。

(2) 资源管理器为该应用程序分配第一个容器(Container),并与对应的节点管理器通信,要求它在此容器中启动MapReduce应用程序管理器。

(3) MapReduce应用程序管理器首先向资源管理器注册,这样用户可以直接通过资源管理器查看应用程序的运行状态,然后它将为各个任务申请资源,并监控它们的运行状态,直到运行结束,即要重复步骤4)~7)。

(4) MapReduce应用程序管理器采用轮询的方式通过RPC协议向资源管理器申请和领取资源。

(5) 一旦MapReduce应用程序管理器申请到资源,便与对应的节点管理器通信,要求启动任务。

(6) 节点管理器为任务设置好运行环境,包括环境变量、JAR包、二进制程序等,然后将任务启动命令写到另一个脚本中,并通过运行该脚本启动任务。

(7) 各个任务通过RPC协议向MapReduce应用程序管理器汇报自己的状态和进度,MapReduce应用程序管理器随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。

在应用程序运行的过程中,用户可以随时通过RPC协议向MapReduce应用程序管理器查询应用程序当前的运行状态。

(8) 应用程序运行完成后,MapReduce应用程序管理器向资源管理器注销并关闭自己。

YARN的容错性

  • 资源管理器的容错性保障

资源管理器存在单点故障,但是可以通过配置资源管理器的HA(高可用),当主节点出现故障时,切换到备用节点继续对外提供服务。

  • 节点管理器任务的容错性保障

节点管理器任务失败之后,资源管理器会将失败的任务通知对应的应用程序管理器,应用程序管理器决定如何处理失败的任务。

  • 应用程序管理器的容错性保障

应用程序管理器任务失败后,由资源管理器负责重启。

其中,应用程序管理器需要处理内部任务的容错问题。资源管理器会保存已经运行的任务,重启后无须重新运行。

YARN的高可用(HA)

YARN的HA主要指资源管理器的HA,因为资源管理器作为主节点存在单点故障,所以要通过HA的方式解决资源管理器单点故障的问题。

实际上最主要的有两点,

  • 一是如何实现主备节点的故障转移。

既然是高可用,即一个主节点失效了,另一个主节点能够马上接替工作对外提供服务,那么这就涉及故障自动转移的实现。在做故障转移时还需要考虑当切换到另外一个主节点时,不应该导致正在连接的客户端失败,主要包括客户端、从节点(NodeManager)与主节点(ResourceManager)的连接。

  • 二是如何实现共享存储。

新的主节点要接替旧的主节点对外提供服务,如何保证新旧主节点的状态信息(元数据)一致

相比HDFS中NameNode的HA, YARN HA做一个比较。

(1) 实现主备节点间故障转移的对比

YARN HA和NameNode HA的不同在于,YARN HA中主备切换控制器作为资源管理器中的一部分,而不是像NameNode HA那样把主备切换控制器作为一个单独的服务运行。

这样YARN HA中的主备切换器就可以更直接地切换资源管理器的状态。

(2) 实现主备节点间数据共享的对比

与HDFS类似,YARN的单点故障仍采用主备切换的方式完成,不同的是,正常情况下YARN的备节点不会同步主节点的信息,而是在主备切换之后,才从共享存储系统读取所需的信息。

之所以这样,是因为YARN资源管理器内部保存的信息非常少,而且这些信息是动态变化的,大部分可以重构,原有信息很快会变旧,没有同步的必要。

因此YARN的共享存储并没有通过其他机制来实现,而是直接借助Zookeeper的存储功能完成主备节点的信息共享。

YARN的调度器及使用

资源调度器是Hadoop YARN中最核心的组件之一,它是ResourceManager中的一个插拔式服务组件,负责整个集群资源的管理和分配。常用的调度器包含FIFO(先进先出)调度器、Capacity调度器(容量调度器)和Fair调度器(公平调度器)。

FIFO调度器

Hadoop最初是为批处理作业而设计的,当时(MRv1)仅采用了一个简单的FIFO调度机制分配任务。

单个Hadoop集群中用户量和应用程序的种类不断增加,适用于批处理场景的FIFO调度机制不能很好地利用集群资源,也不能满足不同应用程序的服务质量要求,因此,设计适用于多用户的资源调度器势在必行。比如雅虎的Capacity调度器和Facebook的Fair调度器。

Capacity调度器

Capacity调度器以队列为单位划分资源,队列以分层方式组织资源,设计了多层级别的资源限制条件以更好地让多用户共享一个Hadoop集群,比如队列资源限制、用户资源限制、用户应用程序数目限制。

队列中的应用以FIFO方式调度,每个队列可设定一定比例的资源最低保证和使用上限,同时,每个用户也可以设定一定的资源使用上限以防止资源滥用。

而当一个队列的资源有剩余时,可暂时将剩余资源共享给其他队列。

Fair调度器

如果应用场景需要先提交的Job先执行,那么就使用FIFO调度器;

如果所有的Job都有机会获得资源,就需要使用Capacity调度器和Fair调度器,Capacity调度器的不足是多个队列资源不能相互抢占,每个队列会提前分走资源,即使队列中没有Job,所以一般情况下都选择使用Fair调度器;

FIFO调度器一般不会单独用,Fair调度器支持在某个队列内部选择Fair调度还是FIFO调度,可以认为Fair调度器是一个混合的调度器。

朗读
赞 · 0
版权属于:

IT技术分享

本文链接:

https://idunso.com/archives/2878/(转载时请注明本文出处及文章链接)