乐趣区

关于hadoop:深入浅出-Yarn-架构与实现43-RM-管理-NodeManager

本篇持续对 RM 中治理 NodeManager 的局部进行深刻的解说。次要有三个局部:查看 NM 是否存活;治理 NM 的黑白名单;响应 NM RPC 申请。

一、简介

在 RM 的主从构造中,最次要的就是 RM 和 NM 之间的主从构造。RM 作为「管理员」,治理上面多个 NM 节点。如何检测 NM 是否存活,划分黑白名单,以及如何相应 NM RPC 申请,将在上面进行具体介绍。

二、NM 治理次要组成

一)NMLivelinessMonitor

  • 检测 NM 活性的服务,是否有心跳
  • 以后正在运行的 NM 会保留在 RM 的一个数据结构中,NMLivelinessMonitor 就周期遍历,若一个 NM 在肯定工夫(默认 10 分钟)未汇报心跳,则工作其挂了
  • NM 被认为挂了后,其上的 Container 会主动置为运行失败,并告诉给 AM,由 AM 决定后续解决计划

    二)NodesListManager

  • 治理 exclude(相似黑名单)和 include(相似白名单)列表
  • 启动时,它们别离从 yarn.resourcemanager.nodes.include-path 以及 yarn.resourcemanager.nodes.exclude-path 中读取
  • 黑名单列表中的 nodes 不可能和 RM 间接通信(间接抛出 RPC 异样)
  • 能够动静加载,应用命令 yarn rmadmin -refreshNodes

    三)ResourceTrackerService

    ResourceTrackerService 是 RPC 协定 ResourceTracker 的一个实现,它作为一个 RPC Server 端接管 NodeManager 的 RPC 申请。
    申请次要蕴含 2 种信息,1)注册 NodeManager。2)解决心跳信息。

  • 注册 NodeManager 解决:ResourceTrackerService#registerNodeManager

    // ResourceTrackerService#registerNodeManager
    public RegisterNodeManagerResponse registerNodeManager(RegisterNodeManagerRequest request) throws YarnException,
        IOException {
      // nm 节点信息 - ip、端口、资源、版本
      NodeId nodeId = request.getNodeId();
      String host = nodeId.getHost();
      int cmPort = nodeId.getPort();
      int httpPort = request.getHttpPort();
      Resource capability = request.getResource();
      String nodeManagerVersion = request.getNMVersion();
    
      RegisterNodeManagerResponse response = recordFactory
          .newRecordInstance(RegisterNodeManagerResponse.class);
    
      // 查看版本
      if (!minimumNodeManagerVersion.equals("NONE")) {if (minimumNodeManagerVersion.equals("EqualToRM")) {minimumNodeManagerVersion = YarnVersionInfo.getVersion();
        }
    
        if ((nodeManagerVersion == null) ||
            (VersionUtil.compareVersions(nodeManagerVersion,minimumNodeManagerVersion)) < 0) {
          String message =
              "Disallowed NodeManager Version" + nodeManagerVersion
                  + ", is less than the minimum version"
                  + minimumNodeManagerVersion + "sending SHUTDOWN signal to"
                  + "NodeManager.";
          LOG.info(message);
          response.setDiagnosticsMessage(message);
          response.setNodeAction(NodeAction.SHUTDOWN);
          return response;
        }
      }
  • 解决心跳

    • 能够到源码中查看具体逻辑 ResourceTracker#nodeHeart
    • 接管并查看 nm 汇报的心跳信息
    • NodeHeartbeatResponse 中 set 须要开释的 Container 列表、Application 列表等信息
    • 向 RMNode 发送该 NodeManager 的状态信息并且保留最近一次心跳应答信息
    • 返回 `NodeHeartbeatResponse
退出移动版