写点什么

YARN 基本架构

  • 2022-10-20
    北京
  • 本文字数:1787 字

    阅读完需:约 1 分钟

YARN基本架构

YARN 总体上采用 master/slave 架构,其中,ResourceManager 为 master,NodeManager 为 slave, ResourceManager 负责对各个 NodeManager 上的资源进行统一管理和调度。当用户提交一个应用程序时,需要提供一个用以跟踪和管理这个程序的 ApplicationMaster,它负责向 ResourceManager 申请资源,并要求 NodeManager 启动可以占用一定资源的任务,由于不同的 ApplicationMaster 被分布到不同的节点上,因此它们之间不会相互影响。

1、ResourceManager(RM)

RM 是一个全局的资源管理器,负责整个系统的资源管理和分配。它主要由两个组件构成:调度器(Scheduler)和应用管理器(Applications Manager, ASM)。

  • 调度器:调度器主要功能是根据资源容量,队列等方面的限制条件(如每个队列分配一定的资源,最多执行一定数量的作业等),将系统中的资源分配给各个应用程序。YARN 中的调度器是一个“纯调度器”,它不再从事任何与具体应用程序相关的工作,比如不负责监控或者跟踪应用的执行状态等,也不负责重新启动因应用执行失败或者硬件故障而产生的失败任务,这些均交由应用程序相关的 ApplicationMaster 完成。调度器仅根据各个应用程序的资源需求进行资源分配,而资源分配单位用一个抽象概念“资源容器”(Resource Container,简称 Container)表示,Container 是一个动态资源分配单位,它将内存、CPU、磁盘、网络等资源封装在一起,从而限定每个任务使用的资源量。在 YARN 中,资源调度器是一个可插拔的组件,用户可根据自己的需要设计新的调度器,YARN 提供了多种直接可用的调度器,比如 Fair Scheduler 和 Capacity Scheduler。

  • 应用程序管理器:应用程序管理器负责管理整个系统中的所有应用程序,包括应用程序提交、与调度器协商资源以启动 ApplicationMaster、监控 ApplicationMaster 运行状态并在失败时重新启动它等。


为了避免单个 ResourceManager 出现单点故障导致整个集群不可用,YARN 引入主备 ResourceManager 实现了 HA,当 Active ResourceManager 出现故障时,Standby ResourceManager 会通过 ZooKeeper 选举,自动提升为 Active ResourceManager。

2、ApplicationMaster(AM)

用户提交的每个应用程序均包含一个独立的 AM,其主要功能包括:

  • 与 RM 调度器协商以获取资源(用 Container 表示)。

  • 将得到的资源进一步分配给内部的任务。

  • 与 NM 通信以启动/停止任务。

  • 监控所有任务的运行状态,并在任务运行失败时重新为任务申请资源以重启任务。


当前 YARN 源代码中自带了两个 AM 实现,一个是用于演示 AM 编写方法的实例程序 distributedshell,它可以申请一定数目的 Container 运行一个 shell 命令或者 shell 脚本,另一个是运行 MapReduce 应用程序的 AM——MRAppMaster。很多开源的计算框架和服务为了能够运行在 YARN 上,也提供了自己的 ApplicationMaster 实现,包括 Open MPI、Spark、HBase、Impala 等。

3、NodeManager(NM)

NM 是每个节点上的资源管理器,一方面,它会定时地向 RM 汇报本节点上的资源使用情况和各个 Container 的运行状态,另一方面,它接收并处理来自 AM 的任务启动/停止等各种请求。在一个集群中,NodeManager 通常存在多个,由于 YARN 内置了容错机制,单个 NodeManager 的故障不会对集群中的应用程序运行产生严重影响。

4、Container

Container 是 YARN 中的基本资源分配单位,是对应用程序运行环境的抽象,并为应用程序提供资源隔离环境。它封装了多维度的资源,如内存、CPU、磁盘、网络等,当 AM 向 RM 申请资源时,RM 为 AM 返回的资源便是用 Container 表示的。YARN 中每个任务均会对应一个 Container,且该任务只能使用该 Container 中描述的资源。需要注意的是,Container 不同于 MRv1 中的 slot,它是一个动态资源划分单位,是根据应用程序的需求动态生成的。Container 最终是由 ContainerExecutor 启动和运行的,YARN 提供了三种可选的 ContainerExecutor:

  • DefaultContainerExecutor:默认 ContainerExecutor 实现,直接以进程方式启动 Container,不提供任何隔离机制和安全机制,任何应用程序最终均是以 YARN 服务启动者的身份运行的。

  • LinuxContainerExecutor:提供了安全和 Cgroups 隔离的 ContainerExecutor,它以应用程序提交者的身份运行 Container,且使用 Cgroups 为 Container 提供 CPU 和内存隔离的运行环境。

  • DockerContainerExecutor:基于 Docker 实现的 ContainerExecutor,可直接在 YARN 集群中运行 Docker Container。Docker 是基于 Linux Container 技术构建的非常轻量级的虚拟机,目前被广泛应用在服务部署、自动化测试等场景中。


发布于: 刚刚阅读数: 7
用户头像

InfoQ签约作者 2018-11-30 加入

热爱生活,收藏美好,专注技术,持续成长

评论

发布
暂无评论
YARN基本架构_YARN_穿过生命散发芬芳_InfoQ写作社区