- 将main方法中的job提交到resourcemanager(RM)中
- resourcemanager 返回其一个jobID和工作目录
- 初始化job(①在HDFS中创建一个带有jobID的工作目录②初始化配置在job.xml文件中③上传jar包④计算任务切片)
- 启动程序(到RM中有一个applicationmaster(AM)负责的全部job中找到其相对应的jobID,然后JOB会去找scheduler(调度器)去申请一个默认容器[1c,1.5G],然后调度器生成调度任务(去nodemanager(NM)创建容器)放到一个队列中)
- 调度器scheduler生成调度任务
- scheduler调用NM去创建程序初始容器
- NM(MRappmaster)去下载程序执行所必须的内容(job.xml,job.jar,splits[ ])缓存到本地中
- MRAppMaster向RM发出申请根据splits申请资源(容器 5mt,2rt),RM将发送过来的申请资源发送给调度器scheduler>> 任务队列[mt1,mt2,mt3,mt4.mt5,rt1.rt2 ]
- 集群中的NM向任务队列中领取属于自己的任务 先领取mt
- 创建一个container容器 初始化一个yarnchild(YC)对象 运行mt任务(并行的由MRappmaster发送指令使集群中每一个容器中的YC运行自己的mt)
- 每个程序在运行中都会向MRappmaster汇报任务进度
- MRappmaster向RM汇报整体的任务进度,及时对小任务执行失败后再调度(RM>>调度器>>放回任务队列再分配)
- NM继续领取rt任务
- RM创建容器运行rt 同第10步
- 汇报任务进度 同11步,12步
- 当mt和rt都执行完毕 MRappmaster向RM汇报任务执行成功
- 释放task任务 释放yarnchild对象 释放容器
- 回收资源
- 释放AppMaster对象 释放资源
- 删除工资目录
MR程序在YARN上的生命周期
最新推荐文章于 2021-10-09 16:41:21 发布