YARN 资源和作业调度详解
一、流程图
二、模块说明
Client:
客户端(用户);
ResourceManager:
负责协调和管理整个集群(所有 NodeManager)的资源。为每一个 ApplicationManager 启动一个 MRApplicationMaster
主程序(MRApplicationMaster 分散在各个 NodeManager 节点);
Yarn Scheduler:
Yarn资源调度器,主要有三种:FIFO,Capacity,Fair,三者区别;
NodeManager:
执行应用程序, 监控应用程序的资源使用情况(CPU,内存,硬盘,网络),通过心跳机制向 ResourceManager 汇报更新健康状态。同时监控每个 Container 的资源使用(内存、CPU 等)情况,节点健康状况;
MRTask:
MapReduce 任务作业;
MRApplicationMaster:
用户主程序,负责向资源调度器申请容器和资源以运行任务;
Container:包装应用程序和资源的抽象逻辑单位。
三、流程详解
1、客户端(用户)向 YARN 中提交应用程序,其中包括 MRApplicationMaster 主程序,启动 MRApplicationMaster 的命令, 用户程序等。
2、ResourceManager 为主程序分配一个 Container 容器,并与Container所在的 NodeManager 进行RPC通讯,要求它在这个 Container 中启动应用主程序 MRApplicationMaster。
3、MRApplicationMaster 采用轮询的方式通过 RPC 协议向 ResourceManager 申请和领取资源。
4、ResourceManager 返回资源列表给 MRApplicationMaster ,随即MRApplicationMaster 与对应的 NodeManager 进行通讯,要求它在自己的容器中启动 MRTask 和 MRApplicationMaster。
5、NodeManager 分解任务并调度任务。
6、各任务通过 RPC 协议向 MRApplicationMaster 汇报自己的状态和进度,以让 MRApplicationMaster 掌握各个任务的运行状态。
7、应用程序运行完成后,MRApplicationMaster 向 ResourceManager 注销并关闭自己。