Yarn是为了解决MRv1中JobTracker负载过重,而设计的第二代MR运行架构。
yarn是个master/slave结构,master节点运行Resourcemanager,slave节点运行nodemanager。
Yarn架构_第1张图片

  1. RM主要有两个组件:资源调度器(scheduler)和应用程序管理器(Applications Manager)
    scheduler主要进行资源调度,不进行任何与应用程序相关的动作,主要包括Capacity Scheduler和Fair scheduler。
    ASM:主要负责提交、启动以及监控每个application的application master
  2. AM
    每个作业都有一个application master来监控和管理自己的所有任务,具备的功能包括:
    a,与RM交互获取任务运行的资源;
    b,与NM交互提交任务、监控任务运行情况等
  3. NM
    一般集群中每个节点启动一个NM,NM不但向RM发送心跳,汇报本节点的资源使用情况;并与AM交互,接收并处理来自AM的所有关于container的请求。
  4. container
    一个逻辑概念,抽象的资源表示形式,可以代表一组多维度资源,目前yarn主要支持cpu和内存。

yarn工作流程

Yarn架构_第2张图片
向yarn提交一个应用程序后,yarn主要分为两个步骤:第一步先启动application master;第二步由AM启动并监控本application中的所有任务,直到完成。

  1. 向yarn提交应用程序,包含application master程序,以及启动am的命令;
  2. RM为AM分配一个container,并与NM通信启动container来运行这个AM(这是唯一一个由RM和NM通信启动的container,其它的container都是AM与NM通信启动)
  3. AM启动之后,主动向RM发送心跳注册自己,此时RM可以监控这个AM,我们可以在yarn web页面上看到这个任务;
  4. AM轮询方式向RM申请和获取资源;
  5. AM获取到资源后,与NM通信要求启动任务;
  6. NM设置任务运行环境,启动任务;
  7. 各个NM上的任务,不断通过RPC向AM发送心跳,汇报自己的状态和进度;
  8. 任务全部完成后,AM向RM注销自己。