文章目录

  • YARN基本介绍
  • Yarn的基本架构
  • ResourceManager(资源管理)
  • Scheduler(调度器)
  • Applications Manger(应用程序管理器)
  • 主备切换
  • Node Manager(节点管理)
  • Application Master(主应用程序)
  • Container(容器)



YARN基本介绍

YARN是Hadoop为了提供计算节点Master(JT)的扩展性,同时为了支持多计算模型和提高资源的细粒度调度而引入的全新一代分布式调度框架。

其可以支持MapReduce、Tez、Spark、Storm、Imlala、Open MPI等计算引擎。

Yarn分为两个独立的守护进程:管理集群上资源使用的资源管理器和管理集群上运行任务生命周期的应用管理器。

Yarn被设计成可以允许应用程序(通过Application Master)以共享的、安全的,以及多租户的方式使用集群的资源。它会感知集群的网络拓扑,以便可以有效地调度,以及优化数据访问(即尽可能地为应用减少数据移动)。

Yarn的基本架构

YARN主要由ResourceManager(RM,资源管理)、NodeManager(NM,节点管理)、ApplicationMaster(AM、主应用程序)、Container(容器)四部分组成。

Resource Manager拥有为系统中所有应用分配资源的决定权,与之相关的是应用程序的Application Master,负责与Resource Manger协商资源。并与Node Manager协同工作来执行和监控任务。

ResourceManager(资源管理)

其中最为核心的是ResourceManager,它作为全局的资源管理,负责整个系统的资源管理和分配,同时接受来自各个节点(NodeManager)的资源汇报信息,并把这些信息按照一定的资源策略分配给各个应用程序(Application Manager),其内部维护了各个应用程序的ApplicationMaster信息、NodeManager信息以及资源使用信息等。

Scheduler(调度器)

Resource Manger有一个可插拔的调度组件Scheduler,它负责为运行中的各种应用分配资源,分配时会受到容量、队列以及其他因素的制约。Scheduler是一个纯粹的调度器,不负责应用程序的监控和状态跟踪,也不保证在应用程序失败或硬件失败的情况下对Task的重启。Scheduler基于应用程序的资源的需求来执行调度功能,使用了称为资源Container的抽象概念,其中包含了多种资源维度,如内存、CUP、磁盘及网络。

Applications Manger(应用程序管理器)

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

YARN设计了一套Active/Standby模式的ResourceManager HA框架,在运行期间会有多个ResourceManager并存,并且其中只有一个ResourceManager处于Active状态,其他则处于Standby状态,当前Active节点无法正常工作时,其余处于Standby状态的节点则会通过竞争产生新的Active节点。

主备切换

  1. 创建锁节点
    所有的RM在启动的时候,都会去创建同一个临时节点,只有一个节点能够创建成功。
    创建成功的那个RM就切换为Active状态,没有成功的那些RM则切换为Standby状态。
  2. 注册Watcher监听
    所有Standby状态的RM都会向节点注册监听,利用临时节点的特性,你能够快速感知到Active状态的Resource的运行状况。
  3. 主备切换
    当Active的RM出现故障或重启情况,在ZooKeeper创建的临时节点会被删除。此时其他Standby状态的RM都会收到Watcher事件通知,重复步骤1操作。
  4. 脑裂现象
    当RM1为Active出现”假死“状态,导致RM2为Active。当RM1恢复正常时,其依然认为自己还处于Active状态。出现多个Active状态RM,这就是”脑裂“现象。
  5. 避免脑裂现象
    解决方法是在创建节点的时候携带ACL信息,已防止其他RM对该节点更新。
    当RM1为Active出现”假死“状态,导致RM2为Active。当RM1恢复正常时会试图更新节点相关数据,但是此时发现其没有权限更新节点数据,也就是说,RM1发现节点不是不是自己创建的,于是就自动切换为Standby状态,避免出现”脑裂“。

Node Manager(节点管理)

负责启动对应的Container,监控Container的资源使用(包括CUP、内存、硬盘和网络等),并把这些信息汇报给调度器(Scheduler)。应用对应的Application Master负责协商从调度器获取Container,并跟踪这些Container的资源状态和应用执行情况。

  1. 为应用启用调度器(Scheduler),以分配给应用的Container。
  2. 已启动的Container不会使用超过分配的资源量。
  3. 为Task构建Container环境,包括二进制可执行文件。
  4. 为所在的节点提供一个管理本地存储资源的简单服务

Application Master(主应用程序)

负责与Resource Manger协商资源,并和Resource Manger协同工作来执行和监控Container,以及它们的资源消耗。

  1. 与调度器协商资源(Resource Manger)
  2. 与Node Manger合作,在合适的Container中运行对应的组件Task,并监控这些task执行情况。
  3. 如果Container出现故障,Application Master会重新向调度器(Scheduler)申请其他资源。
  4. 计算应用程序所需要的资源量,并转化成调度器可识别的协议信息包。
  5. 在Application Master出现故障后,应用管理器(Application Manger)会负责重启它,但由Application Master自己从之前保持的应用程序执行状态中恢复应用程序。

Container(容器)

Container是Resource Manger分配给应用程序特定主机上使用资源(如内存、CUP、网络等)的权利。
通过Application Master将Container提交给Node Manger, 由Node Manger启动Container的任务进程。