2.Yarn资源调度器

2. Yarn资源调度器

2.1 Yarn架构剖析

YARN(Yet Another Resource Negotiator): Hadoop 2.0新引入资源管理系统,直接从MRv1演化而来的;核心思想:将MRv1中JobTracker的资源管理和任务调度两个功能分开,分别由ResourceManager和ApplicationMaster进程实现。YARN的引入,使得多个计算可运行在一个集群中, 每个job对应一个
ApplicationMaster。 目前多个计算框架可以运行在YARN上,比如MapReduce、Spark等解耦资源与计算。
Yarn是一个资源调度平台,负责为运行的程序(提交job作业)提供服务器的资源(CPU、Mem…,网络等)。
在这里插入图片描述

  1. ResourceManager(简称RM)主要作用:
    1. 处理客户端的请求
    2. 监控NodeManager
    3. 启动和监控ApplicationMaster
    4. 负责整个集群的资源管理和调度
  2. NodeManager:
    1. 与RM汇报资源
    2. 管理当前服务器上的Container容器
    3. 处理来自RM的指令
    4. 处理来之ApplicationMaster指令
  3. ApplicationMaster:负责应用程序相关的事务,比如任务调度、任务监控和容错等
    1. 以作业为单位,负载到不同的节点,避免单点故障。
    2. 向RM申请创建Task任务(MapTask、ReduceTask)所需要资源(Container)
    3. 负责任务切分、任务调度、任务监控和容错等
  4. Container:【节点NM,CPU,MEM,I/O大小,启动命令】
    1. 默认NodeManager启动线程监控Container大小
    2. 超出申请资源额度,被kill掉
  5. Client:
    1. RM-Client:请求资源创建AM
    2. AM-Client:与AM交互
      MRAppMaster容错
      失败后,由YARN重新启动
      任务失败后,MRAppMaster重新申请资源

2.2 Yarn工作机制

也是一个job的从提交到执行完毕的全流程,除了job本身执行以外,还有Client、RM、NodeManager、MRApplicationMaster.
在这里插入图片描述
一、作业提交:
提交作业job后,job.waitForCompletion(true)调用monitorAndPrintJob()方法每秒轮询作业进度,如果发现自上次报告后有改变,便把进度报告给控制台。Job的submit()方法创建一个内部的JobSubmitter实例,并调用其submitJobInternal方法(步骤1)。作业完成后,如果成功,就显示计数器;如果失败,这将导致作业失败的错误记录到控制台。
JobSubmitter所实现的作业提交过程如下所述:

  1. 向资ResourceManager源管理器请求一个新作业的ID,用于MapReduce作业ID。
  2. 作业客户端检查作业的输出说明,计算输入分片splits并将作业资源(包括作业Jar包、配置文件和分片信息)复制到HDFS
  3. 通过调用资源管理器上的submitApplication()方法提交作业
    二.作业初始化
  4. 资源管理器ResourceManager收到调用他的submitApplication()消息后,便将请求传递给调度器(scheduler)。调度器分配一个容器(Container),然后资源管理器在节点管理器(NodeManager)的管理下载容器中启动应用程序的master进程(步骤5a和5b)
  5. 接下来,它接受来自共享文件系统的在客户端计算的输入分片(步骤7)。对每一个分片创建一个map任务对象以及由mapreduce. job.reduces属性确定的具体数量的reduce任务对象。
    三.任务分配
  6. AppMaster为该作业中的所有map任务和reduce任务向资源管理器请求容器。
    四.任务执行
  7. 一旦资源管理器的调度器为任务分配了容器,AppMaster就通过与节点管理器NodeManager
    通讯来启动容器(步骤9a和9b)。
  8. 该任务由主类为YarnChild的Java应用程序执行。在它允许任务之前,首先将任务需要的资源本地化,包括作业的配置、JAR文件和所有来自分布式缓存的文件.
  9. 最后运行map任务或reduce任务。

五.进度和状态更新
在YARN下运行时,任务每3秒钟通过umbilical接口向APPMaster汇报进度和状态。客户端每一秒钟(通过
mapreduce.client.Progressmonitor.pollinterval设置)查询一次AppMaster以接收进度更新,通常都会向用户显示。
六.作业完成
除了向AppMaster查询进度外,客户端每5秒还通过调用Job的waitForCompletion()来检测作业是否完成。查询的间隔可以通过mapreduce.client.completion.pollinterval属性进行设置。作业完成后,AppMaster和任务容器清理器工作状态。

猜你喜欢

转载自blog.csdn.net/m0_63953077/article/details/129910211