Yarn源代码分析之旅---ResourceManager---用户交互之ResourceManagerAdministrationProtocol与AdminService

Yarn源代码分析之旅—ResourceManager—用户交互之ResourceManagerAdministrationProtocol与AdminService

AdminService的作用

AdminService为管理员提供了一套独立的服务接口,以防止大量的普通用户的请求使得管理员发送的管理命令饿死。管理员可以通过这些接口命令管理集群,比如动态更新节点列表,更新ACL列表,更新队列信息等等

AdminService的服务初始化

我们在ResourceManager.java下面可以看到,当ResourceManager启动后,AdminService会初始化并加入到ResourceManager得serverList列表。

adminService = createAdminService();
addService(adminService);
rmContext.setRMAdminService(adminService);

具体的AdminService初始化和启动会做哪些工作,可以参考AdminService.java的源代码实现。

@Override
public void serviceInit(Configuration conf) throws Exception {
    if (rmContext.isHAEnabled()) {
      autoFailoverEnabled = HAUtil.isAutomaticFailoverEnabled(conf);
      if (autoFailoverEnabled) {
        if (HAUtil.isAutomaticFailoverEmbedded(conf)) {
          embeddedElector = createEmbeddedElectorService();
          addIfService(embeddedElector);
        }
      }
    }

    // ResourceManager的8033端口
    // ResourceManager 对管理员暴露的访问地址。管理员通过该地址向RM发送管理命令等
    // ResourceManagerAdministrationProtocol协议
    masterServiceBindAddress = conf.getSocketAddr(
        YarnConfiguration.RM_BIND_HOST,
        YarnConfiguration.RM_ADMIN_ADDRESS,
        YarnConfiguration.DEFAULT_RM_ADMIN_ADDRESS,
        YarnConfiguration.DEFAULT_RM_ADMIN_PORT);

    adminAcl = new AccessControlList(conf.get(
        YarnConfiguration.YARN_ADMIN_ACL,
        YarnConfiguration.DEFAULT_YARN_ADMIN_ACL));
    rmId = conf.get(YarnConfiguration.RM_HA_ID);
    super.serviceInit(conf);
  }

主要的,就是构建了一个端口地址绑定,绑定了ResourceManager的8033端口(具体的可以在配置文件设置)

AdminService的服务启动

AdminService启动后,会构建一个RCP的Server端,监听来自8033接口的请求

this.server = (Server) rpc.getServer(
        ResourceManagerAdministrationProtocol.class, this, masterServiceBindAddress,
        conf, null,
      conf.getInt(YarnConfiguration.RM_ADMIN_CLIENT_THREAD_COUNT,
            YarnConfiguration.DEFAULT_RM_ADMIN_CLIENT_THREAD_COUNT));
.....
this.server.start();            

Server端与Client端之间传递的协议就是ResourceManagerAdministrationProtocol

AdminService的客户端调用–RMAdminCLI

打开yarn.sh,我们可以清楚的看到如下代码:

elif [ "$COMMAND" = "rmadmin" ] ; then
  CLASS='org.apache.hadoop.yarn.client.cli.RMAdminCLI'
  YARN_OPTS="$YARN_OPTS $YARN_CLIENT_OPTS"

也就是说,如果是管理员命令的话,RMAdminCLI会做处理,我们找到这个类的源文件。
启动后,会执行run方法,这个方法里面会根据输入的参数,找到并执行相应的方法,比如refreshQueues,refreshNodes等等。

 ResourceManagerAdministrationProtocol adminProtocol = createAdminProtocol();
    RefreshQueuesRequest request = 
      recordFactory.newRecordInstance(RefreshQueuesRequest.class);
    adminProtocol.refreshQueues(request);

实现也比较简单,首先创建协议的代理,然后生成一个请求对象,然后调用Server端的远程方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值