【Hadoop学习】YARN学习

YARN采用Master/Slave架构,ResourceManager为Master,NodeManager为Slave。ResourceManager负责对各个NodeManager上的资源进行统一管理和调度,当用户提交一个应用程序时,需要提供一个用来跟踪和管理这个程序的ApplicationMaster,它负责向ResourceManager申请资源,并要求NodeManager启动可以占用一定资源的任务。由于不同的ApplicationMaster被分布到不同的节点上,因此它们之间不会相互影响。

ResourceManager

ResourceManager简称RM,是一个全局的资源管理器,负责整个系统的资源管理和分配工作。主要由调度器(Scheduler)和应用程序管理器(Applications Master,ASM)两部分组成。

  1. 调度器(Scheduler)
    调度器根据容量,队列等限制条件将系统中的资源分配给各个正在运行的应用程序。
  2. 应用程序管理器(Applications Master)
    ApplicationMaster负责管理整个系统中所有应用程序,包括应用程序提交、与调度器协商资源以启动ApplicationMaster,监控ApplicationMaster运行状态并在失败时重新启动它等。

ApplicationMaster

ApplicationMaster简称AM。YARN中每个应用都会启动一个AM。
主要功能包括:

  1. 与RM调度器协商以获取资源
  2. 将得到的任务进一步分配给内部的任务
  3. 与NM通信以启动/停止任务
  4. 监控所有任务运行状态,并在任务失败时重新为任务申请资源以重新运行任务

NodeManager

NodeManager简称NM,NM是每个节点上的资源和任务管理器
主要功能包括:

  1. 定时向RM汇报本节点上的资源使用情况和各个Continer的运行状态
  2. 接收并处理来自AM的Container启动/停止等各种请求

Container

Container是YARN中资源容器。它封装了某个节点上的多维度资源,如内存、cpu、磁盘、网络等。YARN中所有的应用都是在container上运行的。AM也是在container上运行的,不过AM的container是向RM申请的。YARN会为每一个任务分配一个Container,并且该任务只能使用该Container中描述的资源。

YARN工作流程

YARN上运行的应用程序主要分为两类:短应用程序和长应用程序。

  • 短应用程序是指一定时间内(可能是秒级、分钟级或小时级,尽管天级别或者更长时间的也存在,但是非常少)可运行完成并征程退出的应用程序
  • 长应用程序是指不出意外,永不终止运行的应用程序,通常是一些服务,如Storm,HBase等

YARN的工作流程包括:

  1. 向YARN中提交一个应用程序,其中包括ApplicationMaster程序,启动ApplicationMaster的命令,用户程序等
  2. ResourceManager为该应用程序分配一个Container,并与对应的NodeManager通信,要求它在这个Container中启动应用程序的ApplicationMaster
  3. ApplicationMaster首先向ResourceManager注册(注册之后可以直接通过ResourceManager查看应用程序的运行状态),然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束
  4. ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请和领取资源
  5. 一旦ApplicationMaster申请到资源后,便与对应的NodeManager通信,要求它启动任务
  6. NodeManager为任务设置好运行环境(包括环境变量,jar包,二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务
  7. 各个任务通过RPC协议向ApplicationMaster汇报自己的状态和进度,使得ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务