Yarn详解

一、yarn的基本思想

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

二、Yarn组件

 1.RsourceManager

  RM是一个全局的资源管理器,管理整个集群的计算资源,并将这些资源分配给应用程序。包括:

  • 与客户端交互,处理来自客户端的请求。
  • 启动和管理applicationManager(AM),并在它失败的时候重新启动它。
  • 管理NodeManager,接收来自NodeManager的资源汇报信息,并向NodeManager下达管理指令
  • 资源管理与调度,接收来自AM的资源申请请求,并为之分配资源。

RM 关键配置参数:

  最小容器内存:yarn.scheduler.mininum-allocation-mb

  容器内容容量:yarn.scheduler.increment-allocation-mb

  最大容器内存:yarn.scheduler.maxinum-allocation-mb

 

2.ApplicationMaster(AM)

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

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

3.NodeManager

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

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

4.container

  container是YARN中抽象的资源,它封装了某个节点上的多纬度资源,如内存、cpu、磁盘、网络等。

container由AM向RM申请的,有RM种的资源调度器异步分配给AM。container的运行是由AM向资源所在的nodeManager发起。

一个应用程序所需的container分为两大类:

  1. 运行AM的container:这是由RM申请和启动的,用户提交应用程序是,它可以指定唯一的AM所需的资源
  2. 运行各类任务的container:这是由AM向RM申请的,由AM与NodeManager通信来启动

以上两类Container可能在任意节点上,他们的位置通常是随机的,即AM可能与它管理的任务运行在一个节点上。

 

三、yarn提交流程

  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与对应的NodeManager通信,要求nodeManager启动container。AM与nodeManger保持心跳,从而对AM上的任务进行监控和管理。
  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 applicationattemp -list <application_id>

  查看指定的yarn程序的container列表:yarn container -list <application_id>

  查看指定的container信息:yarn container -status <container id>

  查看nodeManager列表:yarn node -list

  查看nodeManager信息:yarn node -status <node-id>

六、资源调度器

  FIFO调度器

  FIFO调度器的邮件的简单易懂不需要任何配置,但是不适合共享集群。大型应用会占用集群中的所有资源,所以每个应用必须等待直到轮到自己运行。在一个共享集群中,更适合容量调度器或者公平调度器。这两种调度器都允许长时间运行的作业能及时完成,同时也允许正在进行较小的临时查询的用户能够在合理时间内得到返回结果。

  容量调度器

  容量调度器允许多个组织共享一个hadoop集群,每个组织可以分配到全部集群资源的一部分。每个组织被配置一个专门的队列,每个队列被配置为可以使用一定的集群资源,队列可以进一步按层次划分,这样每个组织内的不同用户能够共享该组织队列所分配的资源。在一个队列中,使用FIFO调度策略对应用进行调度。

  单个作业使用的资源不回超过其队列容量。然而如果队列中有多个作业,并且队列资源不够呢?这时如果仍有可用的空闲资源,那么容量调度器可能会将空余的资源分配给队列中的作业,哪怕这会超出队列容量。这被称为弹性队列。

  资源调度器 Fair

  公平调度是一种对全局资源,对于所有应用作业来说,都均匀分配的资源分配方法。默认情况,公平调度器FairScheduler基于内存来安排公平调度策略。也可以配置为同时基于内存和CPU来调度。在一个队列中,可以使用FIFO、FAIR、DRF调度策略来对应用进行调度。FairScheduler允许保障性的分配最小资源到队列。

 

posted @ 2021-09-16 20:38  Arish  阅读(1499)  评论(0编辑  收藏  举报