基于本文回答
0
评论

ResourceManager 和 NodeManager 之间是如何通信的?心跳机制的主要作用包含哪些?

知识点图片

在 Hadoop YARN 架构中,ResourceManager (RM) 是全局的资源管理器,而 NodeManager (NM) 是每个节点上的代理。它们之间的通信和心跳机制是整个 YARN 集群能够正常运行的基石。

以下是关于它们如何通信以及心跳机制作用的详细解析:


一、 ResourceManager 和 NodeManager 之间是如何通信的?

RM 和 NM 之间的通信具有以下几个核心特点:

  1. 基于 Hadoop RPC 协议
    RM 和 NM 之间底层通过 Hadoop RPC (Remote Procedure Call) 进行跨节点通信。
  2. 特定的通信接口 (ResourceTracker)
    NM 和 RM 之间的通信严格遵循 ResourceTracker 协议(在代码中通常表现为 ResourceTrackerPB)。
  3. “拉取”模式(单向发起)
    永远是由 NodeManager 主动向 ResourceManager 发起请求,ResourceManager 被动接收并给予响应。RM 从不会主动连接 NM。
  4. 通信的两个主要阶段
    • 节点注册(Register):当 NM 启动时,它会主动向 RM 发送注册请求,汇报自身所在节点的硬件信息(如可用的 CPU 核数、内存总大小)以及对外服务的端口等。
    • 心跳汇报(Heartbeat):注册成功后,NM 会周期性地(默认通常是 1 秒,会根据集群规模动态调整)向 RM 发送心跳包。

二、 心跳机制的主要作用包含哪些?

心跳(Heartbeat)不仅仅是用来告诉 RM “我还活着”,它是双向信息交换的载体。心跳机制的作用可以分为 “NM 向 RM 汇报状态”“RM 向 NM 下达指令” 两个方面:

1. NodeManager 向 ResourceManager 汇报状态(上报信息)

  • 保活机制 (Keep-alive)
    最基本的作用,向 RM 证明该节点正在正常运行。如果 RM 在一段时间内(默认 10 分钟,由 yarn.nm.liveness-monitor.expiry-interval-ms 控制)没有收到某台 NM 的心跳,就会将其标记为 LOST(丢失),并重新分配该节点上的任务。
  • 节点健康状况汇报 (Node Health Status)
    NM 会运行健康检查脚本或检测磁盘损坏情况。如果节点不健康(例如本地磁盘空间不足或损坏),NM 会在心跳中告诉 RM。RM 收到后会将该节点标记为 UNHEALTHY,不再向其分配新的任务。
  • Container 运行状态汇报
    NM 会将本节点上所有 Container 的状态(如 NEWRUNNINGCOMPLETEKILLED)上报给 RM。特别是当 Container 运行结束(成功或失败)释放资源时,RM 必须通过心跳得知,以便将这些资源重新放入可用资源池中。
  • 资源使用情况汇报
    汇报当前节点已使用的资源和剩余的可用资源(CPU、内存等),这为 RM 的调度器(Scheduler)分配新任务提供了实时的数据支持。

2. ResourceManager 向 NodeManager 下达指令(响应心跳)

因为 RM 不能主动连接 NM,所以 RM 对 NM 的所有控制指令都是包含在心跳响应(Heartbeat Response) 中带回给 NM 的。这些指令主要包括:

  • 清理/杀死 Container (ContainersToCleanup)
    如果某个任务被用户手动 Kill,或者 ApplicationMaster 决定停止某个 Container,或者该 Container 占用的资源超标(OOM),RM 会在心跳响应中要求 NM 杀死并清理对应的 Container。
  • 清理应用程序 (ApplicationsToCleanup)
    当一个 Application 彻底运行结束时,RM 会通知相关的所有 NM 清理该 Application 产生的本地临时文件、日志和工作目录。
  • 安全与令牌更新
    在开启了 Kerberos 安全认证的集群中,RM 会通过心跳响应向 NM 分发或更新 Master Key 和 Delegation Tokens(委托令牌),以确保节点之间的安全通信。

总结

ResourceManager 和 NodeManager 之间通过 RPC 协议 采用 NM 主动汇报 的方式进行通信。其心跳机制不仅是集群的“脉搏”(保活和健康监测),更是 YARN 进行分布式资源视图同步(NM 上报资源和 Container 状态)和分布式任务控制(RM 下发清理和终止指令)的核心通道。

右滑查看面试常问