このトピックでは、Hadoop 分散ファイルシステム (HDFS) によって提供される hdfs haadmin コマンドを使用して高可用性 (HA) を実装する方法について説明します。
背景情報
Hadoop 2.0.0 より前のバージョンでは、各クラスタに 1 つの NameNode のみがデプロイされていました。NameNode が使用できない場合、クラスタも使用できなくなります。 NameNode がクラスタとの接続を再確立するまで、クラスタはサービスを提供できません。
単一 NameNode デプロイメントは、次の側面で HDFS クラスタの可用性に影響します。
ノードのダウンタイムなどの例外が発生した場合、クラスタは使用できなくなります。この場合、NameNode を手動で再起動する必要があります。
ソフトウェアの更新やハードウェアのアップグレードなどの O&M 操作を実行する場合、一定期間クラスタも使用できなくなります。
HDFS HA 機能を使用して、これらの問題を解決できます。HA モードでは、2 つの NameNode がアクティブスタンバイモードでデプロイされます。ノードのダウンタイム時または O&M 中に、NameNode 間でスイッチオーバーを実行して、クラスタのサービスを復元できます。
制限事項
E-MapReduce (EMR) クラスタを作成するときは、高可用性を有効にする必要があります。
HDFS HA
EMR HA クラスタは、Quorum Journal Manager (QJM) を使用して HDFS HA を実装します。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 standbyNameNode がアクティブ状態かスタンバイ状態かを確認する
hdfs haadmin -getServiceState <serviceId> コマンドを実行します。 active または standby の値が返されます。
nn1 のステータスを表示します。
su - hdfs hdfs haadmin -getServiceState nn1nn2 のステータスを表示します。
su - hdfs hdfs haadmin -getServiceState nn2nn3 が存在する場合、nn3 のステータスを表示します。
su - hdfs hdfs haadmin -getServiceState nn3
アクティブ NameNode とスタンバイ NameNode 間でスイッチオーバーを実行する
hdfs haadmin -failover <現在のアクティブの serviceId> <新しいアクティブの serviceId> コマンドを実行して、アクティブ NameNode とスタンバイ NameNode 間でスイッチオーバーを実行します。
たとえば、nn1 が現在のアクティブ NameNode であるとします。次のコマンドを実行すると、nn2 が新しいアクティブ NameNode として機能します。 nn2 がすでにアクティブ NameNode である場合、コマンドの実行後も nn2 はアクティブ NameNode として機能します。
su - hdfs
hdfs haadmin -failover nn1 nn2正常な応答例:
Failover to NameNode at master-1-2.c-dadaf2f2bea8****.cn-hangzhou.emr.aliyuncs.com successful