Bootstrap

分布式资源调度框架 YARN-2020-12-5

YARN:分布式资源调度框架

1. YARN的架构:master/slaves的主从架构

在这里插入图片描述

  • ResourceManager

  1. 组成

    ResourceScheduler->资源调度器,根据节点的容量、队列情况,为应用程序分配资源
    Application Manager->应用程序管理器,负责接受Client端传输的job请求
    
  2. 功能

    1、处理客户端请求
    2、监控NodeManager
    3、启动和监控ApplicationMaster,进行必要的重启
    4、整个系统的资源分配和调度
    
  • NodeManager

    1、本节点上的资源管理和任务管理
    2、定时向ResourceManager汇报本节点上的资源使用情况和各个Container的 使用信息
    3、接收和处理来自ResourceManager的Container启动和停止的各种命令
    4、处理来自ApplicationMaster的指令,比如启动MapTask和ReduceTask指令
    
  • ApplicationMaster

     1、每个应用程序对应一个ApplicationMaster,负责单个应用程序的管理
     2、负责数据切分:MapReduce 任务会根据 InputSplit 信息来进行数据切分
     3、为应用程序向ResourceManager申请资源(Container),并分配内部任务(MapTask和ReduceTask)
     4、与NodeManager通信来启动/停止任务,Task都是运行在Container中的
     5、负责任务的监控和容错,当某些Task运行出错,进行容错处理
    
  • Container

    1、Container是YARN 中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等。
    2、Container是YARN 框架的计算单元,是具体运行 Task(如 MapTask、ReduceTask)的基本单位。
    3、Container像我们使用的虚拟机系统,就是在NodeManager 节点机器上分配一块独立的空间来运行任务。
    

2.YARN的工作机制

在这里插入图片描述
1.作业提交

 (1)client调用job.waitForCompletion 方法,向整个集群提交 MapReduce作业;
 (2)client向 ResourceManager(Application Manager) 申请一个作业 Id;
 (3)ResourceManager给Client 返回该 job 资源的提交路径(HDFS 路径)和作业Id,每一个作业都有一个唯一的Id;
 (4)Client 发送jar包切片信息和配置文件到指定的资源提交路径;
 (5)Client 提交完资源后,向ResourceManager(Application Manager)申请运行job;

2.作业初始化

(6)当Application Manager收到 Client 的请求后,将该 job请求添加到容量调度器(Resouce Scheduler)中;
(7)调度器会将任务放到调度队列中,当执行到该请求时,会通知Application Manager分配容器;
(8)Application Manager指定某一个空闲的 NodeManager 领取到该 job,该 NodeManager 创建 Container,并启动 AppMaster;
(9)AppMaster下载 Client 提交的资源到本地,根据分片信息生成 MapTask 和ReduceTask

3.任务分配

(10)AppMaster向Resouce Scheduler申请运行多个MapTask任务资源;
(11)ResourceManager将运行MapTask任务配给空闲的多个NodeManager,NodeManager 分别领取任务并创建容器(Container)

4.任务运行

(12)AppMaster向接收到任务的NodeManager发送程序启动脚本,每个接收到任务的 NodeManager启动MapTask,MapTask对数据进行处理,并分区排序;
(13)MrAppMaster 等待所有MapTask运行完毕后,向 ResourceManager申请容器(Container)运行ReduceTask;
(14)程序运行完毕后,MrAppMaster会向ResourceManager申请注销自己
(15)YARN中的任务将其进度和状态返回给应用管理器, 客户端每秒向应用管理器请求进度更新, 展示给用户

5. 作业完成

除了向应用管理器请求作业进度外, 客户端每5分钟都会通过调用waitForCompletion()来检 查作业是否完成 。作业完成之后, 应用管理器和container 会清理工作状态。作业的信息会被作业历史服务器存储以备之后用户核查。

3.资源调度器

  • 先进先出调度器(FIFO)
    FIFO Scheduler 把应用按提交的顺序排成一个队列,这是一个先进先出队列,在进行资源分配的时候,先给队列中最头上的应用进行分配资源,待最头上的应需求满足后再给下一个分配
    在这里插入图片描述
  • 容量调度器(Capacity Scheduler)
    支持多个队列,每个队列可配置一定的资源量,每个队列都采用 FIFO 调度
    策略。按照作业优先级和提交时间顺序,同时考虑用户资源量限制和内存限制对队列内任务排序。多个队列同时按照任务的先后顺序依次执行,也就是排在队列前面的最先执行,也是同时执行。
    在这里插入图片描述
  • 公平调度器(Fair Scheduler)
    1、支持多队列,多用户,每个队列中的资源量可以配置,同一队列中的作业公
    平共享队列中所有资源;
    2、每个队列中的 job 按照优先级分配资源,优先级越高分配的资源越多,但是每个 job 都会分配到资源以确保公平;
    3、在同一个队列中,job 的资源缺额越大,越先获得资源优先执行。作业是按照缺额的高低来先后执行的。
    在这里插入图片描述
;