简介
本课程讨论了集群管理器 YARN。
简介
YARN 可以被看作是集群的“操作系统”。集群是一组松散或紧密连接的计算机,它们协同工作,被视为一个单一系统。集群代表了 YARN 必须在运行于其上的各个任务之间进行协调的资源集合,包括计算能力、内存、磁盘空间和网络带宽等。类似于操作系统对单机资源进行管理并分配给竞争的进程,YARN 也负责在竞争的任务之间分配集群资源。下图展示了 YARN 在 Hadoop 技术栈中的位置:
YARN 的功能并非全新;其他类似的集群管理器还包括 Apache Mesos、Google 的闭源 Borg 调度器,以及维基百科上列出的众多集群管理软件。
YARN
YARN 是 Yet Another Resource Negotiator(另一种资源协调器)的缩写。它有两个主要职责:
- 集群资源的管理,如计算能力、网络和内存
- 作业的调度与监控
YARN 通过两个长期运行的守护进程来实现这些目标:
- 资源管理器(Resource Manager)
- 节点管理器(Node Manager)
这两个组件采用主从架构,其中资源管理器(RM)为主节点,节点管理器为从节点。集群中仅运行一个资源管理器,每台机器上运行一个节点管理器。这两个组件共同构成了数据计算框架。下面我们先来讨论资源管理器。
资源管理器
根据官方文档描述,资源管理器是系统中所有应用程序之间资源仲裁的最终权威。资源管理器由两部分组成:
-
应用管理器(Applications Manager):负责接收作业提交请求,并为一个名为 ApplicationMaster 的实体启动容器。如果该容器发生故障,应用管理器还会负责重启它。我们稍后将详细讨论 ApplicationMaster 的相关内容。
-
调度器(Scheduler):负责根据队列和容量限制,分配诸如磁盘、CPU 和网络等资源给正在运行的应用程序。调度器不监控应用程序的运行状态,也不会在应用程序或硬件故障时发起重启。
注意这里的术语“容器”。不要将其与 Docker 等应用容器混淆。在 YARN 的语境中,“容器”是一个抽象概念,代表一组资源,如磁盘、内存、CPU、网络等。一个容器赋予应用程序在特定主机上使用指定数量资源的权限。
在 Unix 系统中,容器表现为一个进程,在 Linux 中则对应 cgroup。Map 和 Reduce 任务都在容器中运行。集群中的单台机器可以运行多个容器。
敏锐的读者会发现,资源管理器存在单点故障问题。如果承载资源管理器的机器宕机,将无法调度任何新作业。为解决这一缺陷,Hadoop 2.4 版本引入了 YARN 的高可用性机制。此时,一对资源管理器以 Active/Standby 模式运行。当活跃的资源管理器失效时,备用节点将自动接管成为新的活跃节点,集群仍能正常运作。从备用切换到活跃模式可由管理员手动执行,也可自动完成。若需自动切换,则需要 Zookeeper 来协助选举。
节点管理器
节点管理器(NodeManager)是运行在集群中每一台机器上的代理程序。它负责在本机启动容器,并管理容器对资源的使用情况。同时,它会将资源使用信息上报给资源管理器中的调度器组件。