Hadoop 之 Yarn

Yarn的架构

  1. ResourceManager:资源管理,主要负责整个yarn的资源调度与分配。

    • 处理客户端的任务请求。
    • 监控NodeManager。
    • 启动或监控ApplicationMaster。
    • 负责资源的分配与调度。
  2. NodeManager:节点管理器,主要负责单个节点上的资源并向ResourceManager汇报。

    • 管理单个节点上的资源。
    • 处理来自ResourceManager的命令。
    • 处理来自ApplicationMaster的命令。
  3. ApplicationMaster:是MapReduce的管理者,负责资源的申请。

    • 为应用程序申请资源并分配内部任务。
    • 负责任务的监控与容错。
    说明:
    • 如果某个NodeManager存在问题,导致节点挂掉,AppMaster会重新向ResourceManager申请节点资源资源。
    • 如果某个节点的Container损坏,AppMaster也会重新向ResourceManager申请资源,ResourceManager分配一个除当前损坏节点外的空闲节点。
    • 若AppMaster所在的节点损坏,会导致整个MapReduce任务失败。
  4. Container:类似与一个容器。

    • Container是yarn资源的抽象,封装了某个节点的多维度资源。

Yarn上Job的提交流程

作业提交:
1.客户端调用 Job对象的waitForCompletion()方法向整个集群提交MapReduce作业,该方法调用Submit()方法创建一个JobSummiter实例,
调用其submitJobInternal()方法,检查作业输出说明,例如没有指明输出目录或输出目录已存在,则不提交作业,错误抛回给MapReduce程序;
并且通过writeSplits()方法计算作业的输入分片,如果分片无法计算,比如输入路径不存在,则作业不提交,错误抛回给MapReduce程序。
作业提交后waitForCompletion()每秒轮询作业进度。
2.客户端向ResourceManager申请一个新的Application。
3.ResourceManager 收到来自客户端的 Application请求后会向客户端返回一个资源提交的临时路径以及Application_id。
4.客户端根据ResourceManage返回的资源提交临时路径去提交任务运行所需要资源,如作业JAR文件、配置文件、计算后的输入分片。
5.客户端通过YarnRunner调用SubmitApplication()方法向ResourceManager提交作业,申请MRAppMaster。
作业初始化:
6.当ResourceManager收到请求后,将作业添加到YARN调度器中等待。
7.调度器分配一个合适Container,然后ResourceManager在NodeManager的管理下在Container启动Application Master进程。
8.Application Master对作业初始化,从资源提交临时路径加载任务所需的资源,并根据分片创建相应map task和 reduec task。
任务分配:
9.待所有资源准备就绪后,Application Master 开始向 ResourceManager 申请相应的 MapTask容器。
10.直到有5%的MapTask 任务运行结束Application Master就开始向 ResourceManager 申请资源运行 ReduceTask。
任务执行:
11.领取到 ResourceManger 分发的 MapTask 任务后开始创建 Container 容器。
12.MapTask启动前先将任务需要的资源本地化,Application Master 向领取到 MapTask 任务的 NodeManager 发送任务资源,
然后 MapTask 开始对数据进行分区排序,最后归并排序。
13.当 Reduce Task 启动后向 MapTask 获取相应分区的数据,并进行归并排序最后分组。
作业完成:
14.所有任务运行结束后Application Master把作业状态设置为成功,然后从waitForCompletion()方法返回。

Yarn调度器

  1. FIFO 先进先出: 支持单队列 、先进先出 生产环境不会用。
  2. Capacity Scheduler 容量调度器:支持多队列,保证先进入的任务优先执行,支持抢占式。 Apache默认。
  3. Fair Sceduler 公平调度器:支持多队列,保证每个任务公平享有队列资源,支持抢占式。 CDH默认。
posted @ 2021-05-26 21:38  青聪  阅读(130)  评论(0)    收藏  举报