我们知道MapReduce1.0,是把计算框架和资源调度框架都弄在一起了,所以Master端的JobTracker会大包大揽去执行任务,存在很多问题,比如资源分配不均、单点故障会导致整个集群不可用、没办法集成多个不同的计算框架(比如Spark、Storm)。因此,YARN的设计思路就是把原先JobTracker的资源管理调度和监控的功能剥离出来,在YARN中实现,而MapReduce2.0仅仅就是做计算框架的事情。同时,YARN还可以兼容搭建多个不同的计算框架,实现同一个集群内资源和数据的共享。
YARN系统架构中有3个核心组件:ResourceManager、ApplicationMaster和NodeManager。
1. ResourceManager
一个全局的资源管理器,负责整个系统的资源调度,包含两个核心组件:Scheduler(调度器)和Application Manager(应用程序管理器)。
- Scheduler:接收来自ApplicationMaster的应用资源请求,把集群中的资源以 Container(容器)的方式分配下去。其中,Container作为动态资源分配单位,每个容器中会封装一定数量的CPU、内存资源;
- Application Manager:负责系统中所有应用程序的管理,主要包括了应用程序的提交、与Scheduler的资源协商、启动ApplicationMaster、监控ApplicationMaster以及失败重启。
这个组件主要实现:
1)处理客户端请求
2)启动/监控 ApplicationMaster
3)监控 NodeManager
4)资源分配与调度
2. ApplicationMaster
主要负责任务调度、监控以及容错机制,为应用程序向ResourceManager申请,并在内部进行分配。
这个组件主要实现:
1)ResourceManager接收来自用户的作业需求,按照Job的上下文信息启动调度,为用户作业启动一个ApplicationMaster。
2)ApplicationMaster会根据用户作业,与ResourceManager协商获取资源,以容器形式从NodeManager请求获得。接着ApplicationMaster会将获取的资源,进一步在内部分配给各个task任务。
3)与NodeManager保持交互通信(程序状态、资源使用情况、进度等等)
4)定时向ResourceManager发送“心跳”信息,报告资源使用情况和进度
5)当作业完成时,ApplicationMaster向ResourceManager注销容器,发送请求到NodeManager去执行注销
3. NodeManager
驻留在一个YARN集群中每个节点上的代理。负责单个节点上的资源管理,处理来自于 ResourceManager和ApplicationMaster的命令。
这个组件主要实现:
1)负责容器生命周期管理
2)监控每个容器的资源(CPU/内存)使用情况
3)以“心跳”方式与ResourceManager保持通信
4)向ResourceManager汇报作业的资源使用情况以及每个容器的运行状态
5)跟踪节点的健康状态
6)接收来自ApplicationMaster的启动/停止容器的请求
4. YARN工作流程
YARN-打横看高清图
1、用户编写客户端应用程序向YARN提交;
2、YARN中的ResourceManager负责接收和处理来自客户端的请求,为应用分配一个容器,在容器中启动一个ApplicationMaster,并且在ResourceManager内注册;
3、ApplicationMaster采用轮询的方式向ResourceManager申请资源(Resource Scheduler);
4、ResourceManager以容器的形式向提出申请的ApplicationMaster分配资源;
5、在容器中启动任务(资源的二次分配);
6、各个任务向ApplicationMaster汇报自己的状态和进度;
7、应用程序运行完成后,ApplicationMaster向ResourceManager的Application Manager注销并关闭自己,释放资源。
Reference
- 林子雨-大数据技术原理与应用- B站视频 https://www.bilibili.com/video/BV1EE411x7wk?p=68