一、YARN的组成
YARN由四大部分组成:ResourceManager、NodeManager、Container和ApplicationMaster。其中ResourceManger中包含两大组件:ApplicationManager和ResourceScheduler,其中ResourceManager作为一个纯资源调度器,只负责分配和调度资源,根据请求将资源打包成Container(一个逻辑资源单位,它可封装CPU、磁盘、网络等等不同种类的资源)进行发送,资源的调度是在运行过程中动态分配的,而ApplicationManager则负责应用程序的提交以及ApplicationMaster的启动及监控。
ResourceManager(RM)
RM是全局资源管理器,负责整个系统的资源管理和分配。
主要由两个组件组成:调度器和应用 程序管理器(ASM)
调度器
调度器根据容量,队列等限制条件,将系统中的资源分配给各个正在运行的应用程序
不负责具体应用程序的相关工作,比如监控或跟踪状态
不负责重新启动失败任务
资源分配单位用“资源容器”resource Container表示
Container是一个动态资源分配单位,它将内存,CPU,磁盘,网络等资源封装在一起,从而限定每个任务的资源量
调度器是一个可插拔的组件,用户可以自行设计
YARN提供了多种直接可用的调度器,比如fair Scheduler和Capacity Scheduler等。
应用程序管理器
负责管理整个系统中所有应用程序
ApplicationMaster(AM)
用户提交的每个应用程序均包含一个AM
AM的主要功能
与RM调度器协商以获取资源(用Container表示)
将得到的任务进一步分配给内部的任务
与NM通信以自动/停止任务
监控所有任务运行状态,并在任务运行失败时重新为任务申请资源以重启任务
当前YARN自带了两个AM实现
一个用于演示AM编写方法的实例程序distributedshell
一个用于Mapreduce程序---MRAppMaster
其他的计算框架对应的AM正在开发中,比如spark等。
Nodemanager(NM)和Container
NM是每个节点上的资源和任务管理器
定时向RM汇报本节点上的资源使用情况和各个Container的运行状态
接收并处理来自AM的Container启动/停止等各种要求
Container是YARN中的资源抽象,它封装了某个节点上的多维度资源
YARN会为每个任务分配一个Container,且改任务只能使用该Container中描述的资源
Container不同于MRv1的slot,它是一个动态资源划分单位,是根据应用程序的需求动态产生的
二、YARN工作步骤
1.client提交用户程序、ApplicationMaster、ApplicationMaster启动命令给RM;
2.由RM中的ApplicationManager向ResourceScheduler请求分配资源(Container),并且让对应的NodeManager在分配到的Container中启动应用程序的ApplicationMaster;
3.ApplicationMaster向RM(实际即ApplicationManager)注册以便ApplicationManager对ApplicationMaster进行监控管理,并且为每个每个任务向ResourceScheduler请求资源;
4.获取资源后,ApplicationMaster与对应的NodeManager通信,令其启动任务;
5.NodeManager为任务设置好运行环境(环境变量、JAR包、二进制代码等等),将任务启动命令写到一个脚本中,并通过运行该脚本启动任务;
6.运行过程中,各个任务通过RPC协议向ApplicationMaster汇报自己的运行情况和资源使用情况;
7.应用程序完成后,ApplicationMaster向ApplicationManager注销并关闭自己。
三、提交作业后,可以使用一下命令查看AM的情况
yarn application -list
每个作业都有与之对应的AM进程。