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

MR程序在YARN上的生命周期

相关文章:

  • 2021-08-13
  • 2021-12-12
  • 2021-10-27
  • 2021-06-26
  • 2022-12-23
  • 2021-12-05
猜你喜欢
  • 2021-07-18
  • 2021-06-17
  • 2021-06-23
  • 2021-10-29
  • 2021-09-11
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案