(1)首先,MR 程序提交到客户端所在的结点,YarnRunner 开始向 ResourceManager 申请一个 Application,ResourceManager 收到请求后返回给 YarnRunner 一个资源路径,随后该程序将运行所需的资源提交到 HDFS 上,资源提交完毕之后会向 ResourceManager 申请运行 MRApplication。
(2)ResourceManager 会将用户请求初始化成一个 Task 放入调度器中,默认使用 Capacity Scheduler 容量调度器。
(3)接着,由其中一个 NodeManager 领取到 Task 任务,该 NodeManager 会创建容器 Container,并产生 MRAPPMaster。其中,Container 会从 HDFS 上拷贝资源到本地,MRAppMaster 会向 ResourceManager 申请运行 MapTask 资源。
(4)然后,ResourceManager 将运行 MapTask 任务分配给另外两个 NodeManager,另外两个 NodeManager 分别领取任务并创建容器。
(5)接着,MRAppMaster 会向接收到任务的 NodeManager 发送程序启动脚本,这两个 NodeManager 分别启动 MapTask,MapTask 对数据进行分区排序。
(6)MRAPPMaster 等待所有 MapTask 运行完毕之后,会再次向 ResourceManager 申请容器,来运行 ReduceTask。ReduceTask 向 MapTask 获取相应的分区数据。
(7)最后,待程序运行完毕之后,MRAPPMaster 会向 ResourceManager 申请注销自己,释放资源。