YARN架构
官方架构图
- ResourceManager,YARN集群中的主角色,决定系统中所有应用程序之间资源分配的最终权限,即最终仲裁者。
接收用户的作业提交,并通过NodeManager分配、管理各个机器上的计算资源。 - NodeManager,YARN中的从角色,一台机器上一个,负责管理本机器上的计算资源。
根据ResourceManager命令,启动Container容器、监视容器的资源使用情况。并且向ResourceManager主角色汇报资源使用情况。 - ApplicationMaster,用户提交的每个应用程序均包含一个ApplicationMaster。
应用程序内的“老大”,负责程序内部各阶段的资源申请,监督程序的执行情况。 - Container容器,是计算机资源的抽象表现,并不是代表真的容器,只是代表计算机分给当前应用程序的资源大小
ResourceManage
ResourceManager主要由两个组件构成:调度器(Scheduler)和应用程序管理器(Applications Manager, ASM)。
调度器(Scheduler):
根据容量、队列等限制条件(如每个队列分配一定的资源,最多执行一定数量的作业等),将系统中的资源分配给各个正在运行的应用程序。
应用程序管理器(Applications Manager):
负责管理整个系统中所有应用程序,包括应用程序提交、与调度器协商资源以启动 ApplicationMaster、监控 ApplicationMaster 运行状态并在失败时重新启动它等。
NodeManager
NodeManager是每个节点上的资源和任务管理器。
- 一方面,它会定时地向 ResourceManager汇报本节点上的资源使用情况和各个 Container 的运行状态;
- 另一方面,它接收并处理来自 ApplicationMaster 的 Container启动 / 停止等各种请求。
ApplicationMaster
职责
- 与 RM 调度器协商以获取资源(用 Container 表示);
- 将得到的任务进一步分配给内部的任务;
- 与 NM 通信以启动 / 停止任务;
- 监控所有任务运行状态,并在任务运行失败时重新为任务申请资源以重启任务。
Container容器
- Container 是YARN 中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等,当 ApplicationMaster向 RM 申请资源时, ResourceManage为 ApplicationMaster返回的资源便是用 Container表示的。YARN 会为每个任务分配一个 Container,且该任务只能使用该 Container 中描述的资源。需要注意的是, Container 不同于 MRv1 中的 slot(槽位),它是一个动态资源划分单位,是根据应用程序的需求动态生成的。
- 当下YARN仅支持CPU和内存两种资源,底层使用了轻量级资源隔离机制Cgroups进行资源隔离 。
核心运行流程
- 第一步,Client端向YARN提交MapReduce作业
- 第二步,NodeManager向ResourceManager汇报当前状态
- 第三步,ApplicationMaster向RM申请运行MapReduce作业需要的资源