YARN架构

官方架构图

yarn的架构角色 yarn架构图_yarn的架构角色

  • ResourceManager,YARN集群中的主角色,决定系统中所有应用程序之间资源分配的最终权限,即最终仲裁者。
    接收用户的作业提交,并通过NodeManager分配、管理各个机器上的计算资源。
  • NodeManager,YARN中的从角色,一台机器上一个,负责管理本机器上的计算资源。
    根据ResourceManager命令,启动Container容器、监视容器的资源使用情况。并且向ResourceManager主角色汇报资源使用情况。
  • ApplicationMaster,用户提交的每个应用程序均包含一个ApplicationMaster
    应用程序内的“老大”,负责程序内部各阶段的资源申请,监督程序的执行情况。
  • Container容器,是计算机资源的抽象表现,并不是代表真的容器,只是代表计算机分给当前应用程序的资源大小

ResourceManage

ResourceManager主要由两个组件构成:调度器(Scheduler)和应用程序管理器(Applications Manager, ASM)

调度器(Scheduler)

根据容量、队列等限制条件(如每个队列分配一定的资源,最多执行一定数量的作业等),将系统中的资源分配给各个正在运行的应用程序。

应用程序管理器(Applications Manager)

负责管理整个系统中所有应用程序,包括应用程序提交、与调度器协商资源以启动 ApplicationMaster、监控 ApplicationMaster 运行状态并在失败时重新启动它等。

NodeManager

NodeManager是每个节点上的资源和任务管理器。

  • 一方面,它会定时地向 ResourceManager汇报本节点上的资源使用情况和各个 Container 的运行状态;
  • 另一方面,它接收并处理来自 ApplicationMaster 的 Container启动 / 停止等各种请求。

yarn的架构角色 yarn架构图_hadoop_02

ApplicationMaster

职责

  • 与 RM 调度器协商以获取资源(用 Container 表示);
  • 将得到的任务进一步分配给内部的任务;
  • 与 NM 通信以启动 / 停止任务;
  • 监控所有任务运行状态,并在任务运行失败时重新为任务申请资源以重启任务。

Container容器

yarn的架构角色 yarn架构图_yarn的架构角色_03

  • Container 是YARN 中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等,当 ApplicationMaster向 RM 申请资源时, ResourceManage为 ApplicationMaster返回的资源便是用 Container表示的。YARN 会为每个任务分配一个 Container,且该任务只能使用该 Container 中描述的资源。需要注意的是, Container 不同于 MRv1 中的 slot(槽位),它是一个动态资源划分单位,是根据应用程序的需求动态生成的。
  • 当下YARN仅支持CPU内存两种资源,底层使用了轻量级资源隔离机制Cgroups进行资源隔离 。

核心运行流程

yarn的架构角色 yarn架构图_架构_04

  • 第一步,Client端向YARN提交MapReduce作业
  • 第二步,NodeManager向ResourceManager汇报当前状态
  • 第三步,ApplicationMaster向RM申请运行MapReduce作业需要的资源