ResourceManager 的 rpc server 模型

一. yarn ResourceManager 的三种通信协议
  1. ResourceTrackerProtocol
    NodeManager 和 ResourceManager 的 RPC 通信协议。其中 ResourceManager 充当RPC Server的角色,而 NodeManager 充当 RPC Client 的角色。NodeManager 通过该协议向 ResourceManager 注册、汇报节点健康情况以及 container 的运行状态,并接收 ResourceManager 下达的重新初始化、清理 container 等命令。NodeManager 周期性主动向 ResourceManager 发送请求,并领取 ResourceManager 下达给自己的命令
  2. ApplicationMasterProtocol
    该协议中,ApplicationMaster 充当 RPC Client 角色,ResourceManager 充当RPC Server 的角色。应用程序的 ApplicationMaster 通过该协议向 角色,ResourceManager 注册、申请、释放资源
  3. ApplicationClientProtocol
    该协议中,应用程序的客户端充当RPC Client的角色,而 ResourceManager 充当 RPC Server 的角色。客户端通过该RPC协议向 ResourceManager 提交应用程序、控制应用程序(如杀死job)以及查询应用程序状态等。yarn rest api 对应的服务端用这个协议处理的。
二. ResourceManager 的用户交互服务

ResourceManager 会开启多总类型的服务,比如管理 NodeManager 的服务,管理 ApplicationMaster 的服务, 还有这里的用户交互服务。用户交互服务有3个:

  1. ClientRMService 负责普通用户交互
    ClientRMService相当于一个RPC Server,是为普通用户提供的服务, 它处理来自客户端各种RPC请求, 比如提交应用程序、 终止应用程序、 获取应用程序运行状态. 它实现了 ApplicationClientProtocol 协议。获取 yarn 中执行完成的任务列表接口 “http://ip:5004/ws/v1/cluster/apps”,就是该类的 getApplications 方法实现的

    public class ClientRMService extends AbstractService implements
        ApplicationClientProtocol {
    
      /**
       * Get applications matching the {@link GetApplicationsRequest}. If
       * caseSensitive is set to false, applicationTypes in
       * GetApplicationRequest are expected to be in all-lowercase
       */
      @Override
      public GetApplicationsResponse getApplications(GetApplicationsRequest request)
          throws YarnException {
        ... ...
         // 从 rmContext 中获取应用列表, 该方法返回一个 ConcurrentMap<ApplicationId, RMApp>
         // 所以获取执行 app 列表的方法只会从 ResourceManager 的内存中获取,不会访问 hdfs
        final Map<ApplicationId, RMApp> apps = rmContext.getRMApps(); 
        Iterator<RMApp> appsIter = apps.values().iterator();
        ... ... 
      }
    }
    

    yarn 的 rest api 都来自 WebServices 基类,它的其中一个子类 RMWebServices 负责接受 rest uri 的请求

    @Singleton
    @Path(RMWSConsts.RM_WEB_SERVICE_PATH)
    public class RMWebServices extends WebServices implements RMWebServiceProtocol {
    
    	@GET
    	@Path(RMWSConsts.APPS)
    	@Produces({ MediaType.APPLICATION_JSON + "; " + JettyUtils.UTF_8, MediaType.APPLICATION_XML + "; " + JettyUtils.UTF_8 })
    	@Override
    	public AppsInfo getApps(@Context HttpServletRequest hsr,
    	  @QueryParam(RMWSConsts.STATE) String stateQuery,
    	  @QueryParam(RMWSConsts.STATES) Set<String> statesQuery,
    	  @QueryParam(RMWSConsts.FINAL_STATUS) String finalStatusQuery,
    	  @QueryParam(RMWSConsts.USER) String userQuery,
    	  @QueryParam(RMWSConsts.QUEUE) String queueQuery,
    	  @QueryParam(RMWSConsts.LIMIT) String limit,
    	  @QueryParam(RMWSConsts.STARTED_TIME_BEGIN) String startedBegin,
    	  @QueryParam(RMWSConsts.STARTED_TIME_END) String startedEnd,
    	  @QueryParam(RMWSConsts.FINISHED_TIME_BEGIN) String finishBegin,
    	  @QueryParam(RMWSConsts.FINISHED_TIME_END) String finishEnd,
    	  @QueryParam(RMWSConsts.APPLICATION_TYPES) Set<String> applicationTypes,
    	  @QueryParam(RMWSConsts.APPLICATION_TAGS) Set<String> applicationTags,
    	  @QueryParam(RMWSConsts.NAME) String name,
    	  @QueryParam(RMWSConsts.DESELECTS) Set<String> unselectedFields) {
    	... ...
    	}
    }
    
  2. AdminService 负责和管理员用户交互

  3. WebApp 用来输出 web 页面

相关推荐

  1. ResourceManager rpc server 模型

    2024-06-06 15:56:06       25 阅读
  2. 【HarmonyOS】Stage 模型 - UIAbility 启动模式

    2024-06-06 15:56:06       29 阅读
  3. CSS盒子模型

    2024-06-06 15:56:06       52 阅读
  4. OpenAIWhisper模型

    2024-06-06 15:56:06       41 阅读
  5. 语言模型发展

    2024-06-06 15:56:06       35 阅读
  6. Django模型使用

    2024-06-06 15:56:06       27 阅读
  7. Doris数据模型

    2024-06-06 15:56:06       27 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-06 15:56:06       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-06 15:56:06       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-06 15:56:06       82 阅读
  4. Python语言-面向对象

    2024-06-06 15:56:06       91 阅读

热门阅读

  1. 【SAP HANA 34】HANA查找函数LOCATE的使用

    2024-06-06 15:56:06       27 阅读
  2. Mybatis学习之Spring boot整合Mybatis示例

    2024-06-06 15:56:06       24 阅读
  3. 什么是HTTPS协议,与HTTP协议有什么区别

    2024-06-06 15:56:06       29 阅读
  4. 【杂记-webshell恶意脚本木马】

    2024-06-06 15:56:06       31 阅读
  5. PTA R6-1 寻找链表元素的前驱结点

    2024-06-06 15:56:06       30 阅读
  6. 逆序数求解算法

    2024-06-06 15:56:06       29 阅读
  7. CSRF 令牌的生成过程和检查过程

    2024-06-06 15:56:06       27 阅读
  8. Xilinx FPGA 管脚的默认电平配置方法 XDC约束

    2024-06-06 15:56:06       29 阅读