0


从零开始了解大数据(五):YARN篇


前言

YARN是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而MapReduce等运算程序则相当于运行于操作系统之上的应用程序。它并不清楚用户提交的程序的运行机制,只提供运算资源的调度(用户程序向YARN申请资源,YARN就负责分配资源)。本文将介绍YARN架构与组件、交互流程、资源调度器Scheduler等内容。


一、Hadoop YARN介绍

Apache Hadoop YARN(Yet Another Resource Negotiator)是一种新的Hadoop资源管理器,是Hadoop生态系统中的一个重要组件。YARN作为一个通用的资源管理系统和调度平台,为上层应用提供了统一的资源管理和调度。

YARN主要功能包括:

  • 资源管理:YARN作为一个资源管理系统,负责集群的硬件资源管理和程序运行相关的事务,如内存、CPU等。它能够有效地管理和调度这些资源,确保集群中的各种计算任务能够得到充分的资源支持。
  • 调度平台:YARN提供了统一的资源调度平台,可以同时处理多个程序申请计算资源的需求。它采用先进的调度算法,根据每个程序的资源需求和优先级,动态地分配计算资源,实现了高效的资源利用率和任务执行效率。
  • 通用性:YARN的设计目标是支持各种计算程序,无论是批处理任务、实时分析任务还是流式任务,都可以在YARN上得到支持。这使得YARN具有非常高的通用性,可以适应各种不同的应用场景。

二、Hadoop YARN架构与组件

YARN的架构设计非常精简,主要包括ResourceManager(RM)、NodeManager(NM)和ApplicationMaster(AM)三个组件。下面将详细介绍每个组件的功能和作用。

YARN官方架构图:

1.ResourceManager(RM)

ResourceManager是YARN集群的主角色,负责决定系统中所有应用程序之间资源分配的最终权限。它接收用户的作业提交,并通过NodeManager分配和管理各个机器上的计算资源。

ResourceManager的核心功能包括:

  • 资源分配:根据作业的需求,ResourceManager将集群中的计算资源分配给各个应用程序。它根据节点的资源使用情况、应用程序的优先级等因素进行分配,确保资源的使用效率。
  • 资源监控:ResourceManager还负责监控已分配的资源使用情况,确保各个应用程序能够合理地使用资源,避免资源的浪费。如果某个应用程序使用了过多的资源,ResourceManager会对其进行调整,以确保整个集群的稳定性。
  • 作业调度:ResourceManager还负责作业的调度,根据作业的优先级和队列规则,决定作业执行的顺序和时间。它采用先进的调度算法,如先进先出、优先级调度等,以实现高效的作业调度和管理。

2.NodeManager(NM)

NodeManager是YARN集群中的从角色,负责管理本机器上的计算资源。它根据ResourceManager的命令,启动Container容器、监视容器的资源使用情况,并且向ResourceManager主角色汇报资源使用情况。

NodeManager的核心功能包括:

  • 资源监控:NodeManager负责监控本机器上的资源使用情况,包括内存、CPU等资源的消耗情况。它将实时监测到的资源使用情况汇报给ResourceManager,以便ResourceManager做出相应的调整。
  • 容器管理:NodeManager还负责管理本机器上的Container容器。它根据ResourceManager的命令,启动或停止容器,并监视容器的运行状态。如果某个容器出现故障或异常情况,NodeManager会及时汇报给ResourceManager进行处理。
  • 任务执行:在收到ResourceManager的命令后,NodeManager会执行相应的任务。它根据任务的需求,合理地分配计算资源,并将任务启动指令发送给相应的容器。在任务执行过程中,NodeManager会持续监视任务的执行情况,并及时向ResourceManager汇报任务的状态和进度。

3.ApplicationMaster

ApplicationMaster(AM)是YARN中每个应用程序的“老大”,负责监督程序执行情况并申请资源。它是一个独立的进程,由ResourceManager为其分配一个Container,用于执行ApplicationMaster。它是YARN应用程序内部的核心组件之一,负责应用程序的资源申请、任务调度、状态监控和容错处理等功能。因此,ApplicationMaster能够让应用程序更加高效地使用YARN集群的资源,并提高应用程序的执行效率和质量。

ApplicationMaster的作用包括:

  • 资源申请:在应用程序提交到YARN后,ApplicationMaster会负责向ResourceManager申请相应的资源。它根据应用程序的需求,向ResourceManager提出资源申请,包括内存、CPU等资源。
  • 任务调度:ApplicationMaster会根据应用程序的需求,将任务分解为不同的任务单元,并按照一定的调度策略分配给各个任务单元。它可以根据任务的优先级、执行顺序等因素进行调度,确保任务执行的效率和正确性。
  • 任务监控:ApplicationMaster会持续监视各个任务的执行情况,并收集任务的执行结果和状态信息。它会将任务的状态和进度信息汇报给ResourceManager,以便用户可以随时了解应用程序的执行情况。
  • 容错处理:如果某个任务执行失败或出现异常情况,ApplicationMaster会负责容错处理。它会尝试重新启动任务,或者将任务转移到其他可用的计算节点上重新执行,以确保应用程序的稳定性和可靠性。

三、程序提交YARN交互流程

在Hadoop的YARN框架中,应用程序的提交和运行经历了两个主要阶段,即客户端阶段和ApplicationMaster阶段。YARN的程序提交和运行过程是一个复杂而有序的过程。通过这种机制,YARN可以有效地管理和调度分布式应用程序,提供灵活性和可扩展性,以满足日益增长的大数据需求。下面将探讨每个阶段以及涉及的交互流程。

1.客户端阶段

当用户通过客户端(如Hadoop命令行界面或Web界面)向YARN提交应用程序时,以下是关键步骤:

  1. 客户端向ResourceManager发送应用程序提交请求。
  2. ResourceManager接收到请求后,会为该应用程序分配第一个Container(容器)。这个Container是用于启动ApplicationMaster的。
  3. ResourceManager与对应的NodeManager通信,要求它在分配的Container中启动应用程序的ApplicationMaster。
  4. ApplicationMaster启动成功后,会向ResourceManager注册并保持通信,这样用户可以通过ResourceManager查看应用程序的运行状态。

在此阶段,用户与ResourceManager进行交互,获取应用程序的资源并启动ApplicationMaster。

2.ApplicationMaster阶段

一旦ApplicationMaster成功启动,它将负责为应用程序的各个任务申请资源和监控它们的运行状态。以下是关键步骤:

  1. ApplicationMaster向ResourceManager申请资源,这通常包括MapReduce作业的Map Task和Reduce Task所需的资源。
  2. ResourceManager为ApplicationMaster分配资源,这些资源将用于运行应用程序的各种任务。
  3. ApplicationMaster与对应的NodeManager通信,要求它为各个任务分配Container并启动它们。
  4. NodeManager为每个任务设置运行环境,并将任务启动命令写入一个脚本中,然后通过运行该脚本来启动任务。
  5. 任务通过某个RPC协议向ApplicationMaster汇报自己的状态和进度,以便ApplicationMaster随时掌握各个任务的运行状态。如果任务失败,ApplicationMaster将重新启动它。
  6. 在应用程序运行过程中,用户可以通过RPC向ApplicationMaster查询应用程序的当前运行状态。
  7. 应用程序运行完成后,ApplicationMaster向ResourceManager注销并关闭自己。

在此阶段,ApplicationMaster与ResourceManager和NodeManager进行交互,以申请资源、启动任务并监控它们的运行状态。通过这种方式,YARN提供了一个灵活、可扩展的资源管理系统,可以有效地管理和调度分布式应用程序。

四、YARN资源调度器Scheduler

YARN资源调度器Scheduler的主要目标是实现对集群资源的管理和分配,它扮演着“控制中心”的角色。在Hadoop生态系统中,YARN资源调度器Scheduler是非常重要的一部分。下面将介绍三种调度器:FIFO SchedulerCapacity SchedulerFair Scheduler,并分析它们的优势和劣势。

1.FIFO Scheduler

FIFO Scheduler是Hadoop1.x中原有的JobTracker调度器实现,它在YARN中得以保留。FIFO Scheduler采用的是先进先出(FIFO)的思想,即先提交的应用先运行。调度工作不考虑优先级和范围,适用于负载较低的小规模集群。但是,当使用大型共享集群时,它的效率较低且会导致一些问题。FIFO Scheduler拥有一个控制全局的队列queue,默认queue名称为default。

优势

  • 无需配置:对于无需配置、先到先得的应用非常方便。
  • 易于执行:提交任务后,按照FIFO原则执行,流程简单明了。

劣势:

  • 任务的优先级不会变高:高优先级的作业需要等待,无法实现优先级较高的任务优先执行。
  • 不适合共享集群:对于多个组织共享整个集群资源的情况,FIFO Scheduler可能不是最佳选择。

2.Capacity Scheduler

Capacity Scheduler是Apache Hadoop3.x默认调度策略。该策略允许多个组织共享整个集群资源,每个组织可以获得集群的一部分计算能力。通过为每个组织分配专门的队列,然后再为每个队列分配一定的集群资源,这样整个集群就可以通过设置多个队列的方式给多个组织提供服务了。简单通俗点来说,就是一个个队列有独立的资源,队列的结构和资源是可以进行配置的。

Capacity Scheduler以队列为单位划分资源,具有以下特性:

  • 层次化的队列设计:可以更容易、更合理地分配和限制资源的使用。
  • 容量保证:每个队列上都可以设置一个资源的占比,保证每个队列都不会占用整个集群的资源。
  • 安全:每个队列有严格的访问控制。用户只能向自己的队列里面提交任务,而且不能修改或者访问其他队列的任务。
  • 弹性分配:空闲的资源可以被分配给任何队列。当多个队列出现争用的时候,则会按照权重比例进行平衡。

3.Fair Scheduler

Fair Scheduler是另一种公平共享大型集群中资源的调度方式,使所有应用在平均情况下随着时间的流逝可以获得相等的资源份额。它设计的主要目标是所有的应用分配公平的资源(对公平的定义通过参数来设置)。Fair Scheduler可以在多个队列间工作,允许资源共享和抢占。

Fair Scheduler具有以下特性:

  • 分层队列:队列可以按层次结构排列以划分资源,并可以配置权重以按特定比例共享集群。
  • 基于用户或组的队列映射:可以根据提交任务的用户名或组来分配队列。如果任务指定了一个队列,则在该队列中提交任务。
  • 资源抢占:根据应用的配置,抢占和分配资源可以是友好的或是强制的,默认不启用资源抢占。
  • 保证最小配额:可以设置队列最小资源,允许将保证的最小份额分配给队列,保证用户可以启动任务。当队列不能满足最小资源时,可以从其它队列抢占。当队列资源使用不完时,可以给其它队列使用。这对于确保某些用户、组或生产应用始终获得足够的资源。
  • 允许资源共享:即当一个应用运行时,如果其它队列没有任务执行,则可以使用其它队列,当其它队列有应用需要资源时再将占用的队列释放出来。所有的应用都从资源队列中分配资源。
  • 默认不限制每个队列和用户可以同时运行应用的数量:可以配置来限制队列和用户并行执行的应用数量。限制并行执行应用数量不会导致任务提交失败,超出的应用会在队列中等待。这样的设计有助于实现更好的资源管理和任务调度。

总结

本文介绍了YARN架构与组件、交互流程、资源调度器Scheduler等内容,希望对大家有所帮助。


本文转载自: https://blog.csdn.net/jiangyq_/article/details/134921138
版权归原作者 橘子-青衫 所有, 如有侵权,请联系我们删除。

“从零开始了解大数据(五):YARN篇”的评论:

还没有评论