YARN详解(ResourceManager/ApplicationMaster/NodeManager/Container)

一、YARN基本思想

YARN是Hadoop2.0中的资源管理系统,它的基本思想是将JobTracker的两个主要功能(资源管理和作业调度/监控)分离,主要方法是创建一个全局的ResourceManager(RM)和若干个针对应用程序的ApplicationMaster(AM)。其中RM负责整个系统的资源管理和分配,而AM负责单个应用程序的管理。这里的应用程序是指传统的MapReduce作业或作业的DAG(有向无环图)。

二、YARN组件

YARN详解(ResourceManager/ApplicationMaster/NodeManager/Container)_第1张图片

1.ResourceManager(RM)

RM是一个全局的资源管理器,管理整个集群的计算资源,并将这些资源分配给应用程序。包括:
  • 与客户端交互,处理来自客户端的请求
  • 启动和管理ApplicationMaster,并在它运行失败时重新启动它
  • 管理NodeManager ,接收来自NodeManager 的资源汇报信息,并向NodeManager下达管理指令
  • 资源管理与调度,接收来自ApplicationMaster 的资源申请请求,并为之分配资源

RM关键配置参数:
最小容器内存: yarn.scheduler.minimum-allocation-mb
容器内存增量: yarn.scheduler.increment-allocation-mb
最大容器内存: yarn.scheduler.maximum-allocation-mb
最小容器虚拟 CPU 内核数量: yarn.scheduler.minimum-allocation-mb
容器虚拟 CPU 内核增量: yarn.scheduler.increment-allocation-vcores
最大容器虚拟 CPU 内核数量: yarn.scheduler.maximum-allocation-mb
ResourceManager Web 应用程序 HTTP 端口: yarn.resourcemanager.webapp.address

2.ApplicationMaster(AM)

应用程序级别的,管理运行在YARN上的应用程序。包括:

  • 用户提交的每个应用程序均包含一个AM,它可以运行在RM以外的机器上。
  • 负责与RM调度器协商以获取资源(用Container表示)
  • 将得到的资源进一步分配给内部的任务(资源的二次分配)
  • 与NM通信以启动/停止任务。
  • 监控所有任务运行状态,并在任务运行失败时重新为任务申请资源以重启任务

AM关键配置参数:
ApplicationMaster 最大尝试次数: yarn.resourcemanager.am.max-attempts
ApplicationMaster 监控过期: yarn.am.liveness-monitor.expiry-interval-ms

3.NodeManager(NM)

YARN中每个节点上的代理,它管理Hadoop集群中单个计算节点。包括:

  • 启动和监视节点上的计算容器(Container)
  • 以心跳的形式向RM汇报本节点上的资源使用情况和各个Container的运行状态(CPU和内存等资源)
  • 接收并处理来自AM的Container启动/停止等各种请求

NM关键配置参数:
节点内存: yarn.nodemanager.resource.memory-mb
节点虚拟 CPU 内核: yarn.nodemanager.resource.cpu-vcores
NodeManager Web 应用程序 HTTP 端口: yarn.nodemanager.webapp.address

4.Container

Container是YARN中资源的抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等。
Container由AM向RM申请的,由RM中的资源调度器异步分配给AM。Container的运行是由AM向资源所在的NM发起。

一个应用程序所需的Container分为两大类:
(1) 运行AM的Container:这是由RM(向内部的资源调度器)申请和启动的,用户提交应用程序时,可指定唯一的AM所需的资源;
(2) 运行各类任务的Container:这是由AM向RM申请的,并由AM与NM通信以启动之。
以上两类Container可能在任意节点上,它们的位置通常而言是随机的,即AM可能与它管理的任务运行在一个节点上。

四、YARN运行流程

YARN详解(ResourceManager/ApplicationMaster/NodeManager/Container)_第2张图片

1.client向RM提交应用程序,其中包括启动该应用的AM的必须信息,例如AM程序、启动AM的命令、用户程序等。
2.RM启动一个container用于运行AM。
3.启动中的AM向RM注册自己,启动成功后与RM保持心跳。
4.AM向RM发送请求,申请相应数目的container。
5.RM返回AM的申请的containers信息。申请成功的container,由AM进行初始化。container的启动信息初始化后,AM与对应的NM通信,要求NM启动container。AM与NM保持心跳,从而对NM上运行的任务进行监控和管理。
6.container运行期间,AM对container进行监控。container通过RPC协议向对应的AM汇报自己的进度和状态等信息。
7.应用运行期间,client直接与AM通信获取应用的状态、进度更新等信息。
8.应用运行结束后,AM向RM注销自己,并允许属于它的container被收回。

五、YARN Shell

# 显示正在执行的yarn程序
yarn application -list
# 停止指定的yarn程序
yarn application -kill <application_id>
# 查看指定的yarn程序
yarn application - status <application_id>
# 查看指定的yarn程序的尝试列表
yarn applicationattempt -list <application_id>
# 查看指定的yarn程序的container列表
yarn container -list <Application Attempt ID>
# 查看指定的container的信息
yarn container -status <Container ID>
# 显示nodemanager列表
yarn node -list
# 显示nodemanager信息
yarn node -status <Node-Id>  

六、资源调度器

▪FIFO调度器(FIFO Scheduler)
YARN详解(ResourceManager/ApplicationMaster/NodeManager/Container)_第3张图片

FIFO调度器的优点是简单易懂不需要任何配置,但是不适合共享集群。大型应用会占用集群中的所有资源,所以每个应用必须等待直到轮到自己运行。在一个共享集群中,更适合使用容量调度器或公平调度器。这两种调度器都允许长时间运行的作业能及时完成,同时也允许正在进行较小临时查询的用户能够在合理时间内得到返回结果。
▪容量调度器(Capacity Scheduler)
YARN详解(ResourceManager/ApplicationMaster/NodeManager/Container)_第4张图片

容量调度器允许多个组织共享一个Hadoop集群,每个组织可以分配到全部集群资源的一部分。每个组织被配置一个专门的队列,每个队列被配置为可以使用一定的集群资源。队列可以进一步按层次划分,这样每个组织内的不同用户能够共享该组织队列所分配的资源。在一个队列内,使用FIFO调度策略对应用进行调度。
单个作业使用的资源不会超过其队列容量。然而如果队列中有多个作业,并且队列资源不够了呢?这时如果仍有可用的空闲资源那么容量调度器可能会将空余的资源分配给队列中的作业,哪怕这会超出队列容量。这被称为弹性队列(queue elasticity)。
▪资源调度器- Fair
YARN详解(ResourceManager/ApplicationMaster/NodeManager/Container)_第5张图片
公平调度是一种对于全局资源,对于所有应用作业来说,都均匀分配的资源分配方法。默认情况,公平调度器FairScheduler基于内存来安排公平调度策略。也可以配置为同时基于内存和CPU来进行调度(Dominant Resource Fairness)。在一个队列内,可以使用FIFO、FAIR、DRF调度策略对应用进行调度。FairScheduler允许保障性的分配最小资源到队列。

你可能感兴趣的:(Hadoop,Yarn)