Hadoop - 高可用服务主备状态查询

在使用 HDFS NameNode 和 Yarn ResourceManager 等具有高可用性的服务时,通常会遇到的一个问题是:判断哪个是主节点(active),哪个是备用节点(standby)。

命令行查询主备状态

一般常用的服务都会提供自带的命令行(如 hdfs cli, yarn cli 等),通过 特定命令+节点id 可以判断主备状态。

a. HDFS NameNode 主备查询命令: hdfs haadmin

CDH中查看HDFS的各项参数,默认在路径/etc/hadoop/conf.cloudera.hdfs/hdfs-site.xml下。在hdfs-site.xml文件中,可以找到高可用相关的配置:

  
    dfs.ha.namenodes.sdg
    namenode25,namenode30
  

从中可以看到,有两个namenode,一个是主节点(active),一个是备用节点(standby)。
如果使用命令行,查看主备的方法是用hdfs haadmin -getServiceState命令,如:

$ hdfs haadmin -getServiceState namenode30
active
$ hdfs haadmin -getServiceState namenode25
standby

记忆方法:输入hdfs haadmin 即可获得命令提示

$ hdfs haadmin
Usage: DFSHAAdmin [-ns ]
    [-transitionToActive  [--forceactive]]
    [-transitionToStandby ]
    [-failover [--forcefence] [--forceactive]  ]
    [-getServiceState ]
    [-checkHealth ]
    [-help ]
b. Yarn ResourceManager 主备查询命令: yarn rmadmin

CDH集群中,yarn-site.xml位于/etc/hadoop/conf.cloudera.yarn/yarn-site.xml,从中可以查看到:

  
    yarn.resourcemanager.ha.rm-ids
    rm201,rm48
  

使用命令 yarn rmadmin -getServiceState 可以查看主备状态:

$ yarn rmadmin -getServiceState rm201
standby
$ yarn rmadmin -getServiceState rm48
active

记忆方法同上。

Java API 查询主备状态

用如果使用Java API,可以首先通过Configuration类获取配置信息,之后使用特定方法获取节点主备状态。
以HDFS NameNode为例,可以通过addResource()方法读取配置信息,之后用HAUtil.getAddressOfActive()方法获取节点主备信息。
例:可使用如下代码输出HDFS NameNode active的节点地址

  Configuration conf = new Configuration();
  conf.addResource(new Path("/etc/hadoop/conf.cloudera.hdfs/core-site.xml"));
  conf.addResource(new Path("/etc/hadoop/conf.cloudera.hdfs/hdfs-site.xml"));
  FileSystem fileSystem = FileSystem.get(conf);
  System.out.println(HAUtil.getAddressOfActive(fileSystem).toString());

你可能感兴趣的:(Hadoop - 高可用服务主备状态查询)