为了能够对集群中的资源进行统一管理和调度,Hadoop 2.0 引入了YARN,大大提高了集群的资源利用率,并提供了容错,资源隔离及负载均衡等方面的支持.
YARN是在MRv1(MapReduce version 1)的基础上演化而来的,这里可以先简单了解一下MRv1的局限性:

  1. 可靠性差:MRv1采用ms结构,但master存在单点故障问题
  2. 扩展性差:JobTracker 同时兼备了资源管理和作业控制俩个功能
  3. 资源利用率低:MRv1采用了基于槽位的资源分配模型,常常导致资源闲置
  4. 无法支持多种计算框架:只支持基于磁盘的离线计算MapReduce

随着互联网发展和实际需求,Apache对其进行升级改造,从而出现MRv2,即后来通用的资源管理系统YARN.

YARN的基本架构

YARN同样采用ms架构,ResourceManage为master,NodeManager为slave,RM负责对各个NM上的资源进行统一管理和调度.当用户提交一个应用程序(作业)时,需要提供一个用以跟踪和管理这个程序的ApplicationMaster,AM负责向RM申请资源,并要求NM启动可以占用一定资源的任务,由于不同的AM会被分布到不同的节点上,因此它们之间互不影响.

  1. ResourceManager
    RM是一个全局的资源管理器,负责整个系统的资源管理和分配,它主要由俩个组件构成:调度器(Scheduler)和应用管理器(Applications Manager)
    调度器:主要功能是根据资源容量,队列等方面的限制条件,将系统中的资源分配给各个应用程序,分配单位是Container.在YARN中资源调度器是一个可插拔的组件,用户可自己设计,目前提供的有Fair Scheduler和Capacity Scheduler(默认).
    应用管理器:负责管理整个系统中所有的应用程序,包括应用程序提交,启动AM,监控AM运行状态及重启它.
  2. ApplicationMaster
    用户提交的每一个应用程序均包含一个独立的AM,不同的计算框架和服务需要自行实现AM,主要功能包括:
    与RM调度器协商获取资源,将得到的资源进一步分配给内部的任务,与NM通信来启动和停止任务,监控任务的运行状态和重启任务.
  3. NodeManager
    每个节点上的资源管理器,定时向RM汇报本节点上资源使用情况和各个Container的运行状态,接受来自AM的任务启停请求.
  4. Container
    基本分配资源单位,是对应用程序运行环境的抽象,并为应用程序提供资源隔离环境.

YARN的工作流程

当用户向YANR提交一个应用程序后,YARN分为俩个阶段运行该应用程序,一是启动AM,二是由AM创建应用程序,为它申请资源,并监控整个运行过程直至成功.

  1. 提交应用程序:用户通过客户端与YARN RM通信提交程序,程序中包含可执行代码,资源需求,优先级,队列信息等.
  2. 启动AM:RM为该应用程序分配第一个Container,并于对应的NM通信,要求它在这个Container启动AM,之后AM的生命周期被RM管理.
  3. AM注册:AM启动后,会向RM(应用管理器)注册,然后重复4-7.
  4. 资源获取:AM 采用轮询方式通过RPC协议向RM申请和领取资源 .
  5. 请求启动Container:AM一旦申请到资源,会与对应的NM通信,请求启动任务,NM会将任务放到Container.
  6. 启动Container:NM为任务设置好运行环境(包括环境变量,jar包,二进制程序等)后,将启动任务命令写到一个脚本中,通过ContainerExecutor运行该脚本启动任务.
  7. Container监控:AM获取各个Container的运行状态以便任务失败时重启
  8. 注销AM:任务结束,AM向RM注销,退出执行

Yarn高可用YarnSessionClusterEntrypoint是什么进程 yarn使用场景_应用管理


YARN的调度器后续会做详细介绍