本文為您介紹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的部署拓撲。
HDFS HA常用命令
查看所有NameNode的狀態
執行hdfs haadmin -getAllServiceState命令,返回所有NameNode的高可用狀態。
su - hdfs
hdfs haadmin -getAllServiceState返回結果如下所示。
master-1-1.c-dadaf2f2bea8****.cn-hangzhou.emr.aliyuncs.com:8021 standby
master-1-2.c-dadaf2f2bea8****.cn-hangzhou.emr.aliyuncs.com:8021 active
master-1-3.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的狀態
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-hangzhou.emr.aliyuncs.com successful