带你领略不一样的YARN

大家好,我是程序员学长。

从今天开始,我们开辟一个新的专栏,在接下来的日子,会为大家分享一些大数据相关的知识。

今天我们先从资源管理器YARN开始聊起。如果对大数据相关技术感兴趣,记得点个关注呀!

初印象

YARN是一个通用的资源管理模块,可为各类应用程序进行资源管理和调度。在YARN上不仅可以运行MapReduce程序,还可以运行Spark、FLink等各种计算框架。YARN总体上采用的是Master/Slave架构,它包括ResourceManager和NodeManager,ResourceManager负责对各个NodeManager上的资源进行管理和调度。

image.png

  1. ResourceManager(RM)

RM是一个全局的资源管理器,负责整个系统的资源管理和分配。它主要由调度器(Scheduler)和应用程序管理器(Applications Manager)组成。调度器根据容量、队列等限制条件,将系统中的资源分配给各个正在运行的作业。YARN提供了多种不同的调度器。包括Fair Scheduler(公平调度)、FIFO Scheduler(先进先出调度)、Capacity Scheduler(容量调度)。应用程序管理器负责管理整个系统中的所有应用程序,包括应用程序的提交、与调度器协商资源以启动ApplicationMaster、监控ApplicationMaster的运行状态以及在失败时重启它。

  1. ApplicationMaster(AM)

用户提交的每个应用程序都包含一个AM。它的主要功能包括。

(1)、与RM调度器协商以获得资源。

(2)、与NM通信以启动/停止任务。

(3)、将得到的任务进一步分配给内部的任务。

(4)、监控任务的运行状态。

  1. NodeManager(NM)

NM是每个节点上的资源和任务的管理器,一方面,它会定时的向RM汇报本节点上的资源使用情况和各个Container的运行状态。另一方面,它接收并处理来自AM的Container启动/停止等请求。

  1. Container

Container是YARN中的资源抽象,它封装了某个节点上的多维度资源,如内存、 CPU、磁盘、网络等,当 AM 向 RM 申请资源时,RM 为 AM 返回的资源便是用Container表示的。

YARN工作流程

当用户向YARN中提交应用程序时,YARN将分两个阶段运行该应用程序。第一个阶段是启动ApplicationMaster;第二个阶段由ApplicationMaster创建应用程序,为它申请资源并监控它的整个运行过程,直到完成。

下面我们来看一下一个任务从提交到执行再到完成的整个过程

1.用户向ResouceManager中提交应用程序。

2.ResourceManager为该应用程序分配第一个Container,并与对应的NodeManager进行通信,要求在这个Container中启动应用程序的ApplicationMaster.

3.ApplicationMaster启动后,向ResourceManager进行注册。然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束,即重复4-7步。

4.ApplicationMaster采用RPC协议向ResourceManger申请和领取资源。

5.一旦ApplicationMaster申请到资源后,便与对应的NodeManager进行通信,要求它启动任务。

6.NodeManger启动相应的任务。

7.各个任务通过RPC的方式向ApplicationMaster汇报自己的状态和进度,可以让ApplicationMaster掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。

8.应用程序执行完成后,ApplicationMaster先ResourceManager注销并关闭自己。

image.png

资源调度模型

YARN采用的是双层资源调度模型。在第一层中,ResourceManager中的资源调度器将资源分配给各个ApplicationMaster;在第二层中,ApplicationMaster再进一步将资源分配给它内部的任务。我们这里主要说一下第一层的调度问题。第二层的调度策略,完全由用户应用程序自己决定。

在YARN中,资源分配过程可以概况为以下7步。

  1. NodeManager通过心跳周期性的汇报节点信息。

  2. ResourceManager为NodeManager返回一个心跳应答,包括释放Container列表等信息。

  3. ResourceManager收到来自NodeManager的信息后,会触发一个Node_Update事件。

  4. ResourceScheduler收到Node_Update事件后,会按照一定的策略将该节点上的资源(步骤2中有释放资源)分配给应用程序,并将分配结果放到一个内存数据结构中。

  5. 应用程序ApplicationMaster周期性的向ResourceManager发送心跳,以领取最新分配的Container。

  6. ResourceManger收到来自ApplicationMaster的心跳信息后,为它分配的Container通过心跳应答的形式返回给ApplicationMaster。

  7. ApplicationMaster收到新分配的Container列表后,会将这些Container进一步分配给它内部的各个任务。

image.png

资源调度器关注的是步骤4中采取的策略,即如何将节点上的空闲资源分配给各个应用程序。

资源调度

资源调度器是YARN中最核心的组件之一,它负责整个集群的资源管理和分配。它提供了三种可用的资源调度器:FIFO Scheduler、Capacity Scheduler和Fair Scheduler。

  1. FIFO Scheduler

FIFO Scheduler,即先来先服务,在该调度机制下,所有作业被统一提交到一个队列中,然后按照提交顺序依次运行这些作业。

  1. Capacity Scheduler

Capacity Scheduler是多用户调度器。它以队列为单位划分资源,每个队列可以设定一定比例的资源最低保证和使用上限,同时,每个用户也可以设定一定的资源使用上限以防止资源滥用。而当一个队列的资源有剩余时,可暂时将剩余资源共享给其它队列。

  1. Fair Scheduler

Fair Scheduler也是一个多用户调度器,同Capacity Scheduler类似,它以队列为单位划分资源。每个队列可以设定一定比例的资源最低保证和使用上限,同时,每个用户也可以设定一定的资源使用上限以防止资源滥用。而当一个队列的资源有剩余时,可暂时将剩余资源共享给其它队列。它与Capacity Scheduler的不同之处,主要体现在以下方面。

(1)、资源公平共享。在每个队列中,Fair Scheduler可以按照FIFO、Fair或DRF策略为应用程序分配资源。默认采用Fair策略。这意味着,如果队列中有两个应用程序同时运行,则每个应用程序得到1/2的资源。

(2)、支持资源抢占。当某个队列中有剩余资源时,调度器会将这些资源共享给其它队列,而当该队列中有新的应用程序提交时,调度器要为他回收资源。

(3)、负载均衡。Fair Scheduler提供了一个基于任务数目的负载均衡机制,该机制尽可能将系统中任务均匀分配到各个节点上。此外,用户也可以根据自己的需求设计负载均衡机制。

(4)、调度策略配置灵活。Fair Scheduler提供了更多样化的调度策略,它允许每个队列单独配置调度策略。当前共有三种调度策略可以选择,分别是FIFO、Fair和DRF。

(5)、提高小应用程序响应时间。由于采用最大最小公平算法,小作业可以快速获取资源并运行完成。

最后

到此为止,我们已经把Hadoop中的资源管理器(YARN)聊完了,如果喜欢,请点个关注吧。

更多有趣知识,请关注公众号**【程序员学长】。我给你准备了上百本学习资料,包括python、java、数据结构和算法等。如果需要,请关注公众号【程序员学长】,回复【资料】**,即可得。

你知道的越多,你的思维也就越开阔,我们下期再见。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享