本文为您介绍HDFS高可用的相关命令HaAdmin。

背景信息

在Hadoop 2.0.0之前,NameNode在HDFS集群中都是以单节点的形式存在。每个集群只有一个NameNode,如果此NameNode不可用,整个集群都会变成不可用的状态,直到NameNode重新与集群建立连接。

单一NameNode主要从两个方面影响HDFS集群的可用性:
  • 当发生一个计划之外的事件,例如机器宕机,集群将会处于不可用状态,直到手动重启NameNode。
  • 有计划的维护事件,例如软件或硬件升级,也会使得集群存在一个不可用的窗口期。

HDFS高可用特性解决了上述问题,通过提供了两个冗余的NameNode以主动或被动的方式用于热备,使得集群既可以从机器宕机中快速恢复,也可以优雅的在有计划的维护时快速恢复。

HDFS HA介绍

EMR高可用集群采用的是HDFS QJM HA,详细信息请参见Architecture。对应的HDFS的部署拓扑结构,请参见HDFS的部署拓扑

使用限制

创建集群时,已开启服务高可用。

查看所有NameNode的状态

执行hdfs haadmin -getAllServiceState命令,返回所有NameNode的高可用状态。

例如:
su hdfs
hdfs haadmin -getAllServiceState
执行成功后会返回如下结果:
master-1-1.c-dadaf2f2bea8****.cn-hangzhou.emr.aliyuncs.com:8021 active
master-1-2.c-dadaf2f2bea8****.cn-hangzhou.emr.aliyuncs.com:8021 standby

查看NameNode的active或standby

执行hdfs haadmin -getServiceState <serviceId>命令,返回active或者standby。
  • 查看nn1的状态
    su hdfs
    hdfs haadmin -getServiceState nn1
  • 查看nn2的状态
    su hdfs
    hdfs haadmin -getServiceState nn2
  • 查看nn3的状态(如果nn3存在)
    su hdfs
    hdfs haadmin -getServiceState nn3

切换NameNode的主备状态

执行hdfs haadmin -failover <serviceId of current active> <serviceId of new active>命令,切换NameNode的主备状态。

例如,nn1当前是Active NameNode,想让nn2成为新的Active NameNode,可执行以下命令。如果nn2当前已是Active NameNode,执行以下命令后,nn2仍为新的Active NameNode。
su hdfs
hdfs haadmin -failover nn1 nn2
执行成功后会返回如下结果:
Failover to NameNode at master-1-2.c-dadaf2f2bea8****.cn-shanghai.emr.aliyuncs.com successful