YARN的架构

本文深入解析了YARN的架构设计,包括ResourceManager、NodeManager、ApplicationMaster等核心组件的工作原理及内部架构,阐述了Container资源模型如何提高资源利用率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

YARN是传统的主从(master/slave)架构,如下图所示
YARN服务由ResourceManager和NodeManager两类进程组成,Container是YARN的资源表示模型,在任何类型的计算框架的作业都可以运行在Container中,ApplicationMaster是YARN的二级资源调度器,它也运行在Container中。

这里写图片描述

1. ResourceManager

YARN的资源调度模型属于双层调度器,而ResourceManager属于双层调度中的中央调度器,是集群中所有资源的管理者,负责集群中所有资源管理和调度。它会定期接受各个NodeManager的资源汇报信息,并进行汇总,并根据资源使用情况将资源分配给各个应用的二级调度器(ApplicationMaster)。

为了更好的理解ResourceManager的运行机制,下面看看ResourceManager内部的架构图
这里写图片描述
下面结合ResourceManager的功能,对一些关键模块进行简单的讲解:

  • Yarn Scheduler:Yarn Scheduler负责给正在运行的应用程序分配资源,它给予应用程序的资源申请来执行资源调度(CPU和内存),它详单与双层调度器的主调度器。
  • ApplicationManager:其负责管理已提交的应用的 集合,在应用提交后,首先检查ApplicationMaster资源请求的合法性,然后确定没有其他已提交的应用已经使用了相同的ID。
  • ApplicationMaster Service:该组件相应来自所有ApplicationMaster的请求,它可以注册新的ApplicationMaster,接受来自任意正在结束的ApplicationMaster的终止或取消注册请求,认证来自不同ApplicationMaster的所有请求,确保只有合法的ApplicationMaster发送的请求传递给ResourceManager中的应用程序对象,获取所有来自所有运行ApplicationMaster的Container的分配和释放请求,异步的转发给yarn调度器。ApplicationMaster Service有额外的逻辑来保证任意时刻只有任意ApplicationMaster只有一个线程可以发送请求给ResourceManager。在ResourceManager上来自ApplicationMaster的RPC被串行化了,这也是主调度器悲观并发的原因。
  • Resource Tracker Service:上面两个模块主要负责与ApplicationMaster打交道,这个模块负责与NodeManager打交道。NodeManager会周期性的发送心跳给ResourceManager的Resource Tracker Service,该组件负责响应来自所有节点的RPC请求,它具体负责注册新节点,接受前面注册节点的心跳,确保只有合法的节点可以和ResourceManager通信,拒绝其他不合法节点。

2. NodeManager

NodeManager是YARN集群中单个节点的代理,管理YARN集群中单个计算节点,它负责保持与ResourceManager的同步,跟踪节点的健康状况,管理各个Container的生命周期,监控每个Container资源使用情况,管理分布式缓存,管理各个Container生成的日志,提供不同yarn应用可能需要的辅助服务,其中,Container的管理是NodeManager的核心功能。

下面是NodeManager的架构图:
这里写图片描述
下面对关键模块进行讲解:

  • NodeStatusUpdater:负责NodeManager和ResourceManager交互,在NodeManager启动时,NodeStatusUpdater回向ResourceManager注册,并发送该节点的可用资源信息,同事还会完成安全方面的认证。在之后的NodeManager与ResourceManager通信的过程中,NodeStatusUpdater会周期性的汇报该节点正在运行的Container信息,状态跟新信息,已完成的Container信息,ApplicationMaster新启动的Container信息。ResourceManager也可已通过该组件通知销毁正在运行的Container,当ResourceManager上面的应用结束后,ResourceManager会向NodeManager发送信号,命令开始清理该应用占用的资源,然后开始日志聚合。
  • ContainerManager:是NodeManager最核心的组件,他有许多子组件构成,每个子组件负责一部分功能,以管理运行在该节点上的所有Container
  • RPC Server:是ApplicationMaster与NodeManager通信的唯一通道。通过RPC Server, ContainerManager从各个ApplicationMaster上接收RPC请求以启动Container或者停止正在运行的Container。
  • ResourceLocalizationService:资源本地化服务,负责Container所需资源的本地化,它能够按照正确的URI从HDFS上下载所需资源。
    - ContainersLauncher:该组件维护了一个线程池来并行完成对Container的相关操作,例如启停Container。
  • **ContainersMonito**r:监控Container的资源使用量。为了实现资源隔离和公平共享,RM为每个Container分配了一定量的资源。ContainersMonitor持续监控每个Container的利用率,一旦一个Container超出了它的允许使用份额,它将向Container发送信号将其杀掉,这可以避免失控的Container影响了同节点上其他正在运行的Container。

3. ApplicationMaster
他是YARN中比较特殊的组件,生命周期随着应用的开始而开始,结束而结束,每个应用对应一个ApplicationMaster。
他负责向ResourceManager申请资源,在对应的NodeManager上启动Container来执行任务,并在应用中不断监控这些Container的状态。
ApplicationMaster的启动是由ResourceManager完成的。当作业被提交后,ResourceManager会在集群中任选一个Container启动作为ApplicationMaster。

4. YARN的资源表示模型Container
YARN的Container模型,对不同计算框架是无差别对待的(比MR模型好很多)。在资源分配上,Container将按照二级调度器申请的大小来按需分配资源,从而大大减少了资源浪费。

### YARN 架构详解及工作原理 #### 1. YARN 的基本概念 YARN 是 Hadoop 集群的资源管理系统,旨在解决 MapReduce 中 JobTracker 存在的单点故障和扩展性问题[^3]。它的核心目标是分离资源管理和作业调度的功能,从而支持多种计算框架(如 Spark、Flink 等),而不仅仅是传统的 MapReduce。 #### 2. YARN 的主要组件 YARN 主要由以下几个关键组件构成: - **ResourceManager (RM)** ResourceManager 是整个 YARN 集群的核心管理模块,负责全局资源的分配和管理工作。它主要包括两个子模块:Scheduler 和 ApplicationsManager。Scheduler 负责将集群资源分配给各个应用程序,而 ApplicationsManager 则负责处理来自客户端的应用程序提交请求并协调 ApplicationMaster 的初始化过程[^4]。 - **NodeManager (NM)** NodeManager 运行在每个节点上,用于监控该节点上的资源使用情况以及任务执行状态。当 RM 向 NM 分配任务时,NM 会启动 Container 来运行具体的任务逻辑。Container 是一种轻量级的资源隔离机制,封装了 CPU、内存等多维资源的信息。 - **ApplicationMaster (AM)** 每个分布式应用都会有一个对应的 ApplicationMaster 实例,其职责类似于传统意义上的 TaskTracker 或者 Worker Role。具体来说,AM 动态申请所需资源并向对应 NM 发送指令以创建容器实例;同时还需要跟踪所有下属任务的状态变化以便及时调整策略或者报告异常事件给上级管理者即 RM。 #### 3. 工作流程概述 以下是基于 YARN 架构的一个典型任务提交与执行流程描述: 1. 用户通过 Client 提交一个新任务到 ResourceManager 上。 2. ResourceManager 接收到此请求后,会先为其分配第一个 Container 并告知某个可用 NodeManager 创建相应的 ApplicationMaster 实体。 3. 成功启动后的 AM 开始向 RM 请求额外所需的 Containers 数量及其规格参数配置文件等内容。 4. 得到批准之后,这些被指派出去的新建 Containers 就会在各自归属地所在位置处开始真正意义上属于业务层面的操作——也就是调用用户定义好的 Mapper/Reducer 函数完成数据加工转换等工作负载[^2]。 此外值得注意的是,在上述过程中还涉及到心跳检测机制用来保持通信链路畅通无阻,并且允许管理员设置超时时限来防止某些长期未响应的服务单元占用宝贵计算能力太久时间。 ```python from pyspark import SparkConf, SparkContext conf = SparkConf().setAppName("example").setMaster("yarn") sc = SparkContext(conf=conf) data = sc.parallelize([1, 2, 3, 4]) result = data.map(lambda x: x * 2).collect() print(result) ``` 以上代码片段展示了如何利用 PySpark 在 YARN 模式下简单操作集合数据的例子。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值