YARN 原理简介

YARN 组件

参考:Spark on Yarn | Spark,从入门到精通网络

YARN 采用 Master/Slave结构 ,包含ResourceManager 和 NodeManager
ResourceManager 是 Master;
NodeManager 是 Slave。架构

YARN的基本思想是将资源管理和做业调度/监视功能划分为单独的守护进程。
其实现为拥有一个全局ResourceManager (RM)和每一个应用程序的ApplicationMaster (AM)。
应用程序能够是单个做业,也能够是一组做业。
从大致看,YARN的调度架构能够分为两层
第一层调度是ResourceManager 和 NodeManager;
第一层调度.png
第二层调度是 NodeManager 和 Container
第一层调度.png
经过采用双层调度结构将 Scheduler 管理的资源由细粒度的 (cpu、内存、磁盘、网络)变成了粗粒度的 Container,下降了负载。
在 App Manager 组件中也只须要管理 App Master,不须要管理任务调度执行的完整信息,一样下降了负载。经过下降 ResourceManager 的负载,变相地提升了集群的扩展性。
ResourceManager和NodeManager构成数据计算框架。ResourceManager是在系统中的全部应用程序之间仲裁资源的最终权威。NodeManager是每台机器的框架代理,负责监视containers的资源使用状况(cpu、内存、磁盘、网络),并向ResourceManager/Scheduler报告相同的状况。
每一个应用程序ApplicationMaster其实是一个特定于框架的库,它的任务是与ResourceManager协商资源,并与NodeManager一块儿执行和监视任务。
ResourceManager有两个主要组件:Scheduler和ApplicationsManager。框架

  • Scheduler
    Scheduler负责根据密集的容量、队列等约束将资源分配给各类正在运行的应用程序。
    Scheduler是纯粹调度器,由于它不执行对应用程序状态的监视或跟踪。
    此外,它也不能保证因为应用程序故障或硬件故障而从新启动失败的任务。
    Scheduler根据应用程序的资源需求执行调度功能;
    它是基于资源containers的抽象概念实现的,资源containers包含内存、cpu、磁盘、网络等元素。
  • ApplicationsManager
    ApplicationsManager负责接受做业提交,协商执行特定于应用程序的ApplicationMaster的第一个容器,并提供在出现故障时从新启动ApplicationMaster容器的服务。
    每一个应用程序ApplicationMaster负责与调度程序协商适当的资源容器,跟踪它们的状态并监视进度。

Yarn 的运做流程

Yarn的运做流程.png

  1. Client 向 ResourceManager 的 App Manager 提交应用并请求一个 AppMaster 实例;
  2. App Manager 向 Scheduler 获取能够运行一个 Container 的 NodeManager
  3. Scheduler 返回一个能够运行一个 Container 的 NodeManager 给 App Manager
  4. App Manager 在返回对 NodeManager 上启动一个Container,并在这个Container上启动 App Master 实例
  5. App Master 向 App Manager注册
  6. 完成注册客户端就能够查询 ResourceManager 得到本身 App Master 的详情以及直接和 App Master 交互
  7. 根据交互状况 App Master 向 向App Manager 请求资源,即 Container
  8. App Manager 收到请求后从 Scheduler 获取到分配资源的信息 返回给 App Master 。
  9. App Master在对应的 NodeManager 上启动 Container 并执行 Task
  10. Container 执行过程当中会把运行进度和状态等信息发送给 AppMaster
  11. Client 和 App Master 交流应用的运行状态、进度更新等信息
  12. 全部任务完后成 App Master 向 App Manager 取消注册而后关闭,同时全部的 Container 也归还给系统。

Scheduler 策略

Scheduler 策略 有下列几种:FIFO Scheduler、Capacity Scheduler、Fair Scheduler代理

  • FIFO Scheduler
    若是没有配置Scheduler 策略的话,全部的任务都提交到一个 default 队列,根据它们的提交顺序执行。
    若是资源充足执行任务,若资源紧张就等待前面的任务执行完毕后释放资源,这就是 FIFO Scheduler 先入先出的分配方式。
    FIFO Scheduler .png
  • Capacity Scheduler
    Capacity Scheduler 是一种多租户、弹性的分配方式。
    支持多个队列,每一个队列可配置必定量的资源,每一个采用FIFO的方式调度。
    每一个租户一个队列,每一个队列能够配置能使用的资源上限与下限(如 50%,达到这个上限后即便其余的资源空置着,也不可以使用),经过配置能够令队列至少有资源下限配置的资源可以使用。
    Capacity Scheduler .png
  • Fair Scheduler
    Fair Scheduler 是一种公平的分配方式,所谓的公平就是集群会尽量地按配置的比例分配资源给队列。
    Job1 提交给队列 A,它占用了集群的全部资源。
    接着 Job2 提交给了队列 B,这时 Job1 就须要释放它的一半的资源给队列 A 中的 Job2 使用。
    接着 Job3 也提交给了队列 B,这个时候 Job2 若是还未执行完毕的话也必须释放一半的资源给 Job3。
    这就是公平的分配方式,在队列范围内全部任务享用到的资源都是均分的。
    Fair Scheduler .png

Yarn HA(容灾备援)

  1. Container 故障:Resource Manager 能够分配其余的 Container 继续执行
  2. App Master 故障:分配新的 Container,启动 App Master,新的 App Master 从 App Manager 获取相关恢复信息
  3. NodeManager 故障:移除这个节点,在其余的 NodeManager 重启继续任务。
  4. ResourceManager 故障:在 Yarn 集群中,ResourceManager 能够启动多台,只有其中一台是 active 状态的,其余都处于待命状态。
    这台 active 状态的 ResourceManager 执行的时候会向 ZooKeeper 集群写入它的状态;
    当它故障的时候这些 RM 首先选举出另一台 leader 变为 active 状态,而后从 ZooKeeper 集群加载 ResourceManager 的状态;
    在转移的过程当中它不接收新的 Job,转移完成后才接收新 Job。
    Yarn HA.png
相关文章
相关标签/搜索