一起揭开 YARN 的神秘面纱

2021-10-19 14:45:01 浏览数 (1)

我们知道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

  1. 林子雨-大数据技术原理与应用- B站视频 https://www.bilibili.com/video/BV1EE411x7wk?p=68

0 人点赞