基于本文回答

播面 播面

文图音视,全方位拆解八股文
0
评论

Hadoop中YARN 采用了怎样的主从(Master/Slave)架构?

知识点图片

Hadoop YARN(Yet Another Resource Negotiator)采用了经典的主从(Master/Slave)架构

在 YARN 的设计中,它将早期的 Hadoop 1.x 中 JobTracker 的两大核心功能——资源管理作业调度/监控进行了拆分,交由不同的组件来处理。

具体来说,YARN 的主从架构由以下几个核心组件构成:

一、 主节点(Master):ResourceManager (RM)

ResourceManager 是整个 YARN 集群的“大脑”,也是主从架构中的 Master。它通常运行在一个独立的节点上,负责整个集群计算资源的统一管理和分配。

ResourceManager 内部包含两个核心子组件:

  1. 调度器(Scheduler):
    • 职责: 根据容量、队列等限制条件,将系统中的资源分配给各个正在运行的应用程序。
    • 特点: 它是一个“纯粹”的调度器。它不从事任何与具体应用程序相关的工作(比如不负责监控应用程序状态,不负责重启失败的任务),只负责将资源(内存、CPU)以 Container(容器) 的形式分配出去。
  2. 应用程序管理器(ApplicationsManager, ASM):
    • 职责: 负责接收客户端提交的作业请求。
    • 工作: 为应用程序分配第一个 Container,用来启动该应用程序的“管家”——ApplicationMaster。它还负责监控 ApplicationMaster,并在其失败时进行重启。

二、 从节点(Slave):NodeManager (NM)

NodeManager 是 YARN 集群中的工作节点,也就是主从架构中的 Slave。它运行在集群的每一个数据节点(DataNode)上。

  • 职责: 负责管理本节点上的计算资源。
  • 主要工作:
    • 定时向 ResourceManager 汇报本节点的资源使用情况和各个 Container 的运行状态(通过心跳机制)。
    • 接收并处理来自 ApplicationMaster 的启动/停止 Container 的请求。
    • 监控本节点上 Container 的资源(内存、CPU等)使用情况,如果某个 Container 使用超量,NM 会将其强行杀死,以保护节点不被拖垮。

三、 YARN 架构中的其他关键角色

虽然 YARN 整体是主从架构,但为了实现“资源管理与作业调度解耦”,它还引入了两个极其重要的动态组件:

  1. ApplicationMaster (AM) - “应用程序管家”

    • 定位: 每个提交到 YARN 的应用程序(如一个 MapReduce 作业、一个 Spark 作业)都会动态生成一个专属的 ApplicationMaster。
    • 职责: 它负责向 ResourceManager(的调度器)申请资源(Containers),拿到资源后,它会与对应的 NodeManager 通信,要求它们在 Container 中启动具体的任务。同时,AM 负责监控这些任务的运行状态、处理任务失败、重新申请资源等。
    • 优势: 以前这些工作都是由 Master (JobTracker) 做的,导致 Master 压力巨大。现在交给了各个作业专属的 AM 去做,大大减轻了 Master 的负担。
  2. Container - “资源容器”

    • 定位: YARN 中的资源抽象单位。
    • 包含: 封装了某个节点上的多维度资源(如 内存、CPU、磁盘、网络等)。所有的应用程序任务(Task)以及 ApplicationMaster 本身,都是运行在 Container 中的。

四、 主从架构的协同工作流程(作业提交过程)

为了更好理解 Master 和 Slave 是如何配合的,我们可以看一个作业提交的简要流程:

  1. 提交: 客户端向 Master (ResourceManager) 提交一个应用程序。
  2. 启动 AM: RM 找到一台有空闲资源的 Slave (NodeManager),分配一个 Container,并在其中启动该作业的 ApplicationMaster。
  3. 申请资源: ApplicationMaster 启动后,向 RM 注册,并根据自己作业的需求,向 RM 申请更多的 Container 资源。
  4. 分配与执行: RM 将资源分配给 AM。AM 拿到资源列表后,主动去找对应的各个 NodeManager(Slaves),要求它们启动 Container 并运行具体的计算任务(Task)。
  5. 监控: 任务运行期间,各个 NodeManager 向 AM 汇报任务状态;同时 NodeManager 也会向 RM 汇报节点的健康状况。
  6. 结束: 作业完成后,AM 向 RM 注销自己,释放所有资源。

总结

YARN 的主从架构可以概括为:

  • 全局资源老板 (Master) = ResourceManager
  • 地方资源主管 (Slave) = NodeManager
  • 包工头 (动态生成) = ApplicationMaster
  • 工位/资源包 = Container

这种架构设计的最大好处是解耦高扩展性,使得 YARN 不仅能运行 MapReduce,还能完美支持 Spark、Flink 等多种计算框架,成为了真正的大数据操作系统的“资源调度内核”。

00:00
00:00