Yarn中ResourceManager相关三大RPC协议

简介:         ResourceManager是Hadoop资源管理器Yarn的Master,负责资源的统一管理和调度。它与Yarn中另外三个组件协同工作,共同完成应用程序在Yarn上的资源管理与调度。

        ResourceManager是Hadoop资源管理器Yarn的Master,负责资源的统一管理和调度。它与Yarn中另外三个组件协同工作,共同完成应用程序在Yarn上的资源管理与调度。通过以下这张图我们就可以看出ResourceManager在资源管理和调度中的地位和作用(ps:图片截取自董西成的《Hadoop技术内幕:深入解析YARN架构设计与实现原理》一书)。


        不难看出,ResourceManager居于整体体系的正中,这也印证了它是Hadoop Yarn中Master节点。它通过不同的RPC协议与NodeManager、ApplicationMaster、Application Client一起协同工作,首先由Application Client向ResourceManager提交应用程序,并产生ApplicationMaster,然后ApplicationMaster申请向RM注册并申请资源,而RM对资源清理能够了如指掌并能够适当分配,则是由于NodeManager向ResourceManager注册并周期性汇报资源情况,这三大组件在RM的统一调度和管理下,共同完成应用程序在Yarn上的资源管理与调度。箭头中间的三个RPC协议,就是本文我将要论述的重点。

        一、ResourceTracker

        这是ResourceManager与NodeManager通信使用的RPC协议。基于ResourceTracker,NodeManager可完成向ResourceManager注册、周期性心跳汇报工作,并在周期性心跳汇报中领取RM下达的命令,比如重新初始化、清理 Container等。在这个过程中,NM扮演的是RPC client的角色,而RM扮演的是RPC server的角色,而这一过程是pull模型,即总是由slave节点NM主动发起,向RM注册或周期性汇报。

        ResourceTracker就提供了两个方法,如下:

  @Idempotent
  public RegisterNodeManagerResponse registerNodeManager(
      RegisterNodeManagerRequest request) throws YarnException,
      IOException;

  @AtMostOnce
  public NodeHeartbeatResponse nodeHeartbeat(NodeHeartbeatRequest request)
      throws YarnException, IOException;
        其中,registerNodeManager()实现了NM向RM注册的过程,而nodeHeartbeat()则实现了NM向RM周期性心跳汇报的过程。

        作为RPC server端,RM中实现这个RPC功能的组件是ResourceTrackerService,在RM内部有成员变量如下定义:

  protected ResourceTrackerService resourceTracker;
        而ResourceTrackerService中也对应实现了ResourceTracker这一RPC接口的两个方法,如下:

  @SuppressWarnings("unchecked")
  @Override
  public RegisterNodeManagerResponse registerNodeManager(
      RegisterNodeManagerRequest request) throws YarnException,
      IOException {
    ......
    ...省略主要代码...
    ......
    return response;
  }

  @SuppressWarnings("unchecked")
  @Override
  public NodeHeartbeatResponse nodeHeartbeat(NodeHeartbeatRequest request)
      throws YarnException, IOException {
    ......
    ...省略主要代码...
    ......
    return nodeHeartBeatResponse;
  }
        至于其具体实现,我以后再分析。

        二、ApplicationMasterProtocol

        这是ResourceManager与ApplicationMaster通信使用的RPC协议。ApplicationMaster通过它完成向RM注册、申请资源和释放资源的过程。在这个过程中,AM扮演的是RPC client的角色,而RM扮演的是RPC server的角色,而这一过程也是pull模型,即总是由AM主动发起,RM被动接受的。

        ApplicationMasterProtocol提供了三个方法,如下:

  @Public
  @Stable
  @Idempotent
  public RegisterApplicationMasterResponse registerApplicationMaster(
      RegisterApplicationMasterRequest request) 
  throws YarnException, IOException;

  @Public
  @Stable
  @AtMostOnce
  public FinishApplicationMasterResponse finishApplicationMaster(
      FinishApplicationMasterRequest request) 
  throws YarnException, IOException;

  @Public
  @Stable
  @AtMostOnce
  public AllocateResponse allocate(AllocateRequest request) 
  throws YarnException, IOException;
        其中,registerApplicationMaster()实现的是AM向RM注册这一过程,allocate()实现的则是AM向RM发起的资源申请,最后finishApplicationMaster()则完成了应用程序的关闭与资源释放。

        同样,作为RPC server端,RM中实现这个RPC功能的组件是ApplicationMasterService,在RM内部有成员变量如下定义:

  protected ApplicationMasterService masterService;
        ApplicationMasterService中也实现了ApplicationMasterProtocol这一RPC接口的三个核心方法,如下:

  @Override
  public RegisterApplicationMasterResponse registerApplicationMaster(
      RegisterApplicationMasterRequest request) throws YarnException,
      IOException {
      ......
      ...省略主要代码...
      ......
      return response;
    }
  }

  @Override
  public FinishApplicationMasterResponse finishApplicationMaster(
      FinishApplicationMasterRequest request) throws YarnException,
      IOException {
      ......
      ...省略主要代码...
      ......
      // For UnmanagedAMs, return true so they don't retry
      return FinishApplicationMasterResponse.newInstance(
          rmApp.getApplicationSubmissionContext().getUnmanagedAM());
    }
  }

  @Override
  public AllocateResponse allocate(AllocateRequest request)
      throws YarnException, IOException {
      ......
      ...省略主要代码...
      ......
      return allocateResponse;
    }    
  }
        具体过程以后分析。

        三、ApplicationClientProtocol

        这是ResourceManager与Application Client通信使用的RPC协议。Application Client通过它完成向RM提交应用程序、查看应用程序状态、控制应用程序(杀死)等的过程。在这个过程中,Application Client扮演的是RPC client的角色,而RM扮演的是RPC server的角色。

        ApplicationClientProtocol提供了十四个方法,其中比较常见的有如下:

  @Public
  @Stable
  @Idempotent
  public SubmitApplicationResponse submitApplication(
      SubmitApplicationRequest request) 
  throws YarnException, IOException;

  @Public
  @Stable
  @Idempotent
  public KillApplicationResponse forceKillApplication(
      KillApplicationRequest request) 
  throws YarnException, IOException;

  @Public
  @Stable
  @Idempotent
  public GetClusterMetricsResponse getClusterMetrics(
      GetClusterMetricsRequest request) 
  throws YarnException, IOException;

  @Public
  @Stable
  @Idempotent
  public GetClusterNodesResponse getClusterNodes(
      GetClusterNodesRequest request) 
  throws YarnException, IOException;

  @Public
  @Stable
  @Idempotent
  public GetQueueInfoResponse getQueueInfo(
      GetQueueInfoRequest request) 
  throws YarnException, IOException;

  @Public
  @Unstable
  @Idempotent
  public MoveApplicationAcrossQueuesResponse moveApplicationAcrossQueues(
      MoveApplicationAcrossQueuesRequest request) throws YarnException, IOException;
        其中,submitApplication()实现的是Application Client向RM提交应用程序这一过程,forceKillApplication()实现的则是Application Client向RM发起的强制杀死应用程序,moveApplicationAcrossQueues()则完成了Application Client请求RM将应用程序从一个队列移动到另外一个队列的过程,getClusterMetrics()则实现了Application Client向RM请求获取集群整体情况的过程,最后getClusterNodes()、getQueueInfo()则相应实现了AC请求RM获取集群节点情况、队列情况的过程。        作为RPC server端,RM中实现这个RPC功能的组件是ClientRMService,在RM内部有成员变量如下定义:

  private ClientRMService clientRM;
        ClientRMService中也实现了ApplicationClientProtocol这一RPC接口的方法,如下:

  @Override
  public SubmitApplicationResponse submitApplication(
      SubmitApplicationRequest request) throws YarnException {
    ......
    ...省略主要代码...
    ......
    return response;
  }

  @SuppressWarnings("unchecked")
  @Override
  public KillApplicationResponse forceKillApplication(
      KillApplicationRequest request) throws YarnException {
    ......
    ...省略主要代码...
    ......
    // For UnmanagedAMs, return true so they don't retry
    return KillApplicationResponse.newInstance(
        application.getApplicationSubmissionContext().getUnmanagedAM());
  }

  @SuppressWarnings("unchecked")
  @Override
  public MoveApplicationAcrossQueuesResponse moveApplicationAcrossQueues(
      MoveApplicationAcrossQueuesRequest request) throws YarnException {
    ......
    ...省略主要代码...
    ......
    return response;
  }

  @Override
  public GetClusterMetricsResponse getClusterMetrics(
      GetClusterMetricsRequest request) throws YarnException {
    ......
    ...省略主要代码...
    ......
    return response;
  }

  @Override
  public GetClusterNodesResponse getClusterNodes(GetClusterNodesRequest request)
      throws YarnException {
    ......
    ...省略主要代码...
    ......
    return response;
  }

  @Override
  public GetQueueInfoResponse getQueueInfo(GetQueueInfoRequest request)
      throws YarnException {
    ......
    ...省略主要代码...
    ......
    return response;
  }
        同样,具体实现以后再做详细分析。


相关文章
|
Dubbo Cloud Native 网络协议
【Dubbo3技术专题】「服务架构体系」第一章之Dubbo3新特性要点之RPC协议分析介绍
【Dubbo3技术专题】「服务架构体系」第一章之Dubbo3新特性要点之RPC协议分析介绍
296 1
|
8天前
|
JSON 移动开发 网络协议
gRPC不是银弹:为内网极致性能,如何设计自己的RPC协议?
自研RPC协议针对内网高并发场景,通过精简帧头、长度前缀解决TCP拆包粘包,支持灵活扩展与高效序列化,显著提升性能与资源利用率,适用于对延迟敏感的分布式系统。
55 4
|
5月前
|
XML JSON 网络协议
利用HTTP POST协议实现简单的RPC协议:WireShark抓包分析
通过这种方式,我们可以使用HTTP POST实现简单的RPC协议,并使用WireShark进行抓包分析。这不仅可以帮助我们理解RPC协议的工作原理,也可以帮助我们调试和优化我们的代码。
229 30
|
5月前
|
JSON 数据格式
利用HTTP POST协议实现简单的RPC协议,并使用WireShark进行抓包分析
通过这种方式,我们可以利用HTTP POST实现简单的RPC协议,并使用WireShark进行抓包分析。这种方式简单易懂,实用性强,可以应用于各种网络编程场景。
194 16
|
10月前
|
Dubbo 安全 应用服务中间件
Apache Dubbo 正式发布 HTTP/3 版本 RPC 协议,弱网效率提升 6 倍
在 Apache Dubbo 3.3.0 版本之后,官方推出了全新升级的 Triple X 协议,全面支持 HTTP/1、HTTP/2 和 HTTP/3 协议。本文将围绕 Triple 协议对 HTTP/3 的支持进行详细阐述,包括其设计目标、实际应用案例、性能测试结果以及源码架构分析等内容。
562 109
|
Java Android开发
java利用xml-rpc协议操作wordpress博客
java利用xml-rpc协议操作wordpress博客
168 1
|
API 开发者 微服务
RPC和 HTTP协议
【8月更文挑战第8天】RPC(远程过程调用)使程序能像本地调用般请求远程服务,简化网络通信细节。其优点包括高效的数据传输及严格的类型定义,适合微服务间的高效通信。HTTP(超文本传输协议)则是用于万维网数据传输的通用协议,以文本为基础,易于理解和调试,并被广泛支持。两者各有侧重,RPC偏高速服务通信,HTTP则更适用于多样化的网络场景。选择时需根据具体需求决定。
122 2
|
资源调度 分布式计算 Hadoop
实时计算 Flink版操作报错合集之perjob提交给yarn,报错显示无法连接yarn- Connecting to ResourceManager,是什么导致的
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
存储 网络协议 数据处理
面试官,设计一个RPC协议?我...
面试官,设计一个RPC协议?我...
150 0
|
网络协议 Dubbo 应用服务中间件
一文带你搞懂HTTP和RPC协议的异同
一文带你搞懂HTTP和RPC协议的异同