ResourceManager 的 rpc server 模子

打印 上一主题 下一主题

主题 506|帖子 506|积分 1518

一. yarn ResourceManager 的三种通信协议


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

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

  • ClientRMService 负责普通用户交互
    ClientRMService相当于一个RPC Server,是为普通用户提供的服务, 它处理来自客户端各种RPC哀求, 比如提交应用程序、 终止应用程序、 获取应用程序运行状态. 它实现了 ApplicationClientProtocol 协议。获取 yarn 中执行完成的任务列表接口 “http://ip:5004/ws/v1/cluster/apps”,就是该类的 getApplications 方法实现的
    1. public class ClientRMService extends AbstractService implements
    2.     ApplicationClientProtocol {
    3.   /**
    4.    * Get applications matching the {@link GetApplicationsRequest}. If
    5.    * caseSensitive is set to false, applicationTypes in
    6.    * GetApplicationRequest are expected to be in all-lowercase
    7.    */
    8.   @Override
    9.   public GetApplicationsResponse getApplications(GetApplicationsRequest request)
    10.       throws YarnException {
    11.     ... ...
    12.      // 从 rmContext 中获取应用列表, 该方法返回一个 ConcurrentMap<ApplicationId, RMApp>
    13.      // 所以获取执行 app 列表的方法只会从 ResourceManager 的内存中获取,不会访问 hdfs
    14.     final Map<ApplicationId, RMApp> apps = rmContext.getRMApps();
    15.     Iterator<RMApp> appsIter = apps.values().iterator();
    16.     ... ...
    17.   }
    18. }
    复制代码
    yarn 的 rest api 都来自 WebServices 基类,它的其中一个子类 RMWebServices 负责接受 rest uri 的哀求
    1. @Singleton
    2. @Path(RMWSConsts.RM_WEB_SERVICE_PATH)
    3. public class RMWebServices extends WebServices implements RMWebServiceProtocol {
    4.         @GET
    5.         @Path(RMWSConsts.APPS)
    6.         @Produces({ MediaType.APPLICATION_JSON + "; " + JettyUtils.UTF_8, MediaType.APPLICATION_XML + "; " + JettyUtils.UTF_8 })
    7.         @Override
    8.         public AppsInfo getApps(@Context HttpServletRequest hsr,
    9.           @QueryParam(RMWSConsts.STATE) String stateQuery,
    10.           @QueryParam(RMWSConsts.STATES) Set<String> statesQuery,
    11.           @QueryParam(RMWSConsts.FINAL_STATUS) String finalStatusQuery,
    12.           @QueryParam(RMWSConsts.USER) String userQuery,
    13.           @QueryParam(RMWSConsts.QUEUE) String queueQuery,
    14.           @QueryParam(RMWSConsts.LIMIT) String limit,
    15.           @QueryParam(RMWSConsts.STARTED_TIME_BEGIN) String startedBegin,
    16.           @QueryParam(RMWSConsts.STARTED_TIME_END) String startedEnd,
    17.           @QueryParam(RMWSConsts.FINISHED_TIME_BEGIN) String finishBegin,
    18.           @QueryParam(RMWSConsts.FINISHED_TIME_END) String finishEnd,
    19.           @QueryParam(RMWSConsts.APPLICATION_TYPES) Set<String> applicationTypes,
    20.           @QueryParam(RMWSConsts.APPLICATION_TAGS) Set<String> applicationTags,
    21.           @QueryParam(RMWSConsts.NAME) String name,
    22.           @QueryParam(RMWSConsts.DESELECTS) Set<String> unselectedFields) {
    23.         ... ...
    24.         }
    25. }
    复制代码
  • AdminService 负责和管理员用户交互
  • WebApp 用来输出 web 页面

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

万万哇

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表