以下是我对yarn平台的运行过程和任务分配的理解,有不同意见的朋友可以在评论中提出来,一起讨论
Yarn中,ResourceManager可分为ApplicationManager和ResourceScheduler
1.客户向ResourceManager提交作业
2.ApplicationManager向NodeManager提出启动container,并在container中产生ApplicationMaster
3.然后ApplicationMaster 向ApplicationManager注册,同时ApplicationMaster 会向ResourceScheduler提出资源的申请
4.申请到资源后ApplicationMaster 会通知所在的NodeManager启动作业,NodeManager启动container作业并开启对应的Map/Reduce Task
5.执行的Task向ApllicationMaster汇报完成情况
6.当任务完成,ApplicationMaster 会向ApplicationManager汇报并注销任务
也就是说 在这个过程中,ResourceScheduler负责资源调度,ApplicationManager负责任务调度。总体来说,ResourceManager负责整个集群的资源管理与调度以及任务分配;NodeManager负责资源供给和资源隔离,ResourceManager将某个NodeManager上资源分配给任务(这就是所谓的“资源调度”)后,NodeManager需按照要求为任务提供相应的资源,甚至保证这些资源应具有独占性,为任务运行提供基础的保证(这就是所谓的“资源隔离”)。Nodemanager定时的通过心跳的形 式与ResourceManager进行通信,报告节点的健康状态与内存使用情况;ApplicationMaster通过与ResourceManager交互获取资源,然后然后通过与NodeManager交互,启动计算任务。