Yarn的job提交流程详解

Hadoop-Yarn

Yarn的job提交流程详解

[TOC]

注:本文专业名字简称释义如下:

  • MR : MapReduce
  • RM:ResourceManager
  • AM:ApplicationMaster
  • NM:NodeManager

案例:MRJob流程详解

1、作业提交

  1. Clinet 调用job.waitForCompletion方法,向整个集群提交MapReduce作业,并向ResourceManager申请一个JobID

  2. RM给Client返回一个该Job资源的提交路径(HDFS路径)和作业ID(每一个作业都有一个唯一的ID)

  3. Client发动jar包、切片信息和配置信息上传到指定的资源提交路径

  4. Client提交完资源之后,向RM申请运行MRAppMaster(正对该Job的AM)

    2、作业初始化

  5. 当RM收到Client的请求后,将该Job添加到资源调度器(Resource Scheduler)中

  6. 调度器会将Job放到调度队列中,当执行到相应的Job时,会通知ApplicationManager分配Job需要的资源

  7. 某一个空闲的NM领取到该Job,ApplicationManager调用NM开辟资源的容器(Container),创建并启动 Job对应的MRAppMaster

  8. MRAppMaster获取并下载HDFS上提交的文件到本地,根据切片信息产生maptask和reducetask

    3、任务分配

  9. MRAppMaster向RM申请运行maptask和reducetask的资源,该请求会放至资源调度器(Resource Scheduler)中

  10. 在资源调度器(Resource Scheduler)运行到该请求时,返回执行信息给RM指定的多个NM

  11. 多个NM随之创建Contianer以运行maptasks

    4、任务运行

  12. MRAppMaster向接收到任务的多个NM发送程序启动脚本,每个接收到认为的NM启动maptask,maptask对数据进行处理,并分区排序

  13. MRAppMaster等待所有的maptask运行完毕后,MRAppMaster重复执行9-10操作以创建container运行reducetask

  14. 程序运行完成后,MRAppMaster会向RM申请注销自己以释放资源

  15. 进度状态跟新。YARN中的任务将其进度和状态(包括counter)返回给应用管理器,Client每秒向RM请求进度更新,展示给用户。用户阔以使用Yarn WebUI查看任务的执行状态(IP:8088)

    5、作业完成

  16. 除了向RM请求作业进度外,Client每五分钟都会调用waitForCompletion() 方法来检查作业是否完成。作业完成之后,RM和container会清理工作状态。作业的信息会被作业历史服务器储存以备之后用户核查。

    • Client每秒设置:mapreduce.client.progressmonitor.pollinterval
    • Client每五分钟设置:mapreduce.client.completion.pollinterval

Yarn的job提交流程详解

Yarn下的RM与NM的工作职责

​ YARN也采用了Master/Slave结构,其中,Master实现为ResourceManager,负责整个集群资源的管理与调度;Slave实现为NodeManager,负责单个节点的资源管理与任务启动

ResourceManager

  • 是整个YARN集群中最重要的组件之一,它的设计直接决定了系统的可扩展性、可用性和容错性等特点
  • 资源调度和分配:接收来自ApplicationMaster的资源申请请求,并为之分配资源
  • 管理NodeManager/资源监视:接收来自NodeManager的资源汇报信息,并向NodeManager下达管理指令(比如杀死Container等)
  • 与客户端交互,处理来自客户端的请求
  • 启动和管理ApplicationMaster,并在它运行失败时重新启动它

NodeManager

  • NodeManager是Yarn中单节点的代理,它管理Hadoop集群中单个计算节点,他需要与应用程序的ApplicationMaster和集群管理器RM交互,从ApplicationMaster上接收到相关Container的命令(启动,停止Container)并执行,向RM汇报各个Container的运行状态和节点健康状态,并领取相关的Container的命令执行;
  • 与RM保持通信
  • 管理Container的生命周期
  • 监控每个Container的资源使用情况
  • 追踪节点健康状况
  • 管理日志以及不同应用程序用到的附属服务

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!