将原JobTacker三大功能拆分
本质:是一个资源调度框架,原来的MapRedece既是一个资源调度框架,也是一个计算框架
。
MapReduce2.0的改进:它是运行在Yarn上的一个纯粹的计算框架,不再负责资源调度管理服务,而是由Yarn为其提供资源管理调度服务。
(1)ResourceManager组件:
- 处理客户端请求
- 监控、启动ApplicationMaster
- 监控NodeManager
- 资源分配与调度
(2)ApplicationMaster组件:
- 为应用程序申请资源,并分配给内部任务
- 任务调度、监控与容错
(3)NodeManager:
- 单个节点上的资源(容器生命周期)管理
- 处理来自ResourceManager命令
- 处理来自ApplicationMaster命令
(4)Container:是Yarn中的资源抽象,他封装了多个维度的资源,如内存、CPU、磁盘、网络
其中
ResourceManager:
(1)调度器: 接收来自ApplicationMaster的应用程序资源请求,把资源以容器的形式分配给提出申请的应用程序。
(2)应用程序管理器:负责应用程序的管理工作,包括应用程序提交、与调度器协商资源以启动ApplicationMaster、监控ApplicationMaster,并在失败时重启。
ApplicationMaster:
(1)用户作业提交时,ApplicationMaster与ResourceManager协商获取资源,ResourceManager以容器的形式给ApplicationMaster分配资源。
(2)把获得的资源进一步分配给内部的各个任务(Map任务和Reduce任务)。
(3)与NodeManager保持通信进行应用程序的启动、运行、监控和停止,监控申请到的资源的申请情况,和所有任务的执行进度和状态,在任务失败时执行任务恢复。
(4)定时向ResourceManager发送心跳,报告资源的使用情况和应用的进度信息。
(5)作业完成,ApplicationMaster向ResourceManager注销容器,执行周期完成。
(1)用户向Yarn提交应用程序,包括ApplicationMaster程序、用户程序,启动ApplicationMaster命令。
(2)ResourceManager为应用程序分配第一个容器,并与NodeManager通信,要求它在容器中启动ApplicationMaster
(3)ApplicationMaster被创建后向ResourManager注册(只有注册了AM才能监管到RM,RM才能汇报信息)。
(4)ApplicationMaster采用轮询的方式向ResourceManager申请资源
(5)ResourceManager以容器的形式向提出申请的ApplicationMaster分配资源
(6)一旦ApplicationMaster申请到资源,就与NodeManager通信,要求其启动任务
(7)NodeManager设置好环境,把任务启动命令加载进一个脚本,通过这个脚本启动任务
(8)各个任务通过某个RPC协议向ApplicationMaster汇报自己的状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。在应用程序运行过程中,用户可随时通过RPC向ApplicationMaster查询应用程序的当前运行状态。
(9)应用程序运行完成后,ApplicationMaster向ResourceManager注销并关闭自己。



