Amazon EMR クラスターで NameNode サービスのセーフモードをオフにするにはどうすればよいですか?

所要時間3分
0

Amazon EMR クラスターで Apache Hadoop または Apache Spark ジョブを実行しようとすると、NameNode サービスがセーフモードになります。セーフモードをオフにしようとしましたが、すぐにオンに戻ります。NameNode をセーフモードから解除したいと考えています。

簡単な説明

Amazon EMR クラスターで Apache Hadoop または Apache Spark ジョブを実行すると、次のいずれかのエラーメッセージが表示される場合があります。

「Cannot create file/user/test.txt._COPYING_.Name node is in safe mode.」(file/user/test.txt._COPYING_ を作成できません。名前ノードはセーフモードです。)

「org.apache.hadoop.hdfs.server.namenode.SafeModeException: /user/hadoop/.sparkStaging/application_15xxxxxxxx_0001 を削除できません。名前ノードはセーフモードです。それはマニュアルでオンになりました。セーフモードをオフにするには、「hdfs dfsadmin -safemode leave」を使用してください。NamenodeHostName:ip-xxx-xx-xx-xx.ec2.internal」

NameNode のセーフモードは、Hadoop Distributed File System (HDFS) クラスターの読み取り専用モードです。セーフモードでは、ファイルシステムやブロックに変更を加えることはできません。ほとんどのファイルシステムブロックが使用可能であることを DataNodes が報告すると、NameNode は自動的にセーフモードを終了します。ただし、NameNode は次の理由でセーフモードになる場合があります。

  • 使用可能な領域が、NameNode ストレージディレクトリで必要な領域よりも少ない。NameNode ディレクトリに必要な領域の量は、パラメータ dfs.namenode.resource.du.reserved で定義されます。
  • NameNode は FsImageEditLog をメモリにロードできない。
  • NameNode は DataNode からブロックレポートを受信しなかった。
  • クラスター内の一部のノードがダウンしている可能性がある。これにより、ノード上のブロックが使用できなくなります。
  • 一部のブロックが破損している可能性がある。

NameNode のログの場所 /var/log/hadoop-hdfs/ で問題の根本原因を確認します。

解決方法

セーフモードを終了する前に、NameNode がセーフモードでスタックしている理由を認識し、理解していることを確認します。すべての DataNodes と NameNode のログのステータスを確認します。

重要: 場合によっては、セーフモードを手動でオフにすると、データが失われる可能性があります。

セーフモードを手動でオフにするには、次のコマンドを実行します。

sudo -u hdfs hadoop dfsadmin -safemode leave

エラーの根本原因に応じて、次の 1 つまたは複数のトラブルシューティングのステップを実行して、セーフモードをオフにします。

複数のプライマリノードを持つクラスターに切り替える

単一のプライマリノードを持つクラスターでは、チェックポイントは自動ではありません。これは、HDFS 編集ログが新しいスナップショット (FsImage) にバックアップされず、削除されないことを意味します。HDFS は編集ログを使用して、スナップショット間のファイルシステムの変更を記録します。プライマリノードが 1 つのクラスターから編集ログを手動で削除するのがベストプラクティスです。編集ログを手動で削除しないと、ログが /mnt のすべてのディスク領域を使用する可能性があります。この問題を解決するには、複数のプライマリノードを持つクラスターを起動します。複数のプライマリノードを持つクラスターは、HDFS NameNode のために高可用性をサポートします。NameNode のための高可用性は、チェックポイントの問題を解決します。

詳細については、「Plan and configure primary nodes」(プライマリノードを計画して設定する) を参照してください。

不要なファイルを /mnt から削除する

/mnt で使用できる最小ディスク領域は、dfs.namenode.resource.du.reserved パラメータで指定されます。/mnt のために使用できるディスク領域が dfs.namenode.resource.du.reserved で設定された値を下回る値になると、NameNode はセーフモードに入ります。dfs.namenode.resource.du.reserved のデフォルト値は 100 MB です。NameNode がセーフモードの場合、ファイルシステムやブロックの変更は許可されません。したがって、/mnt から不要なファイルを削除すると、問題の解決に役立つ場合があります。

不要になったファイルを削除するには、次のステップを実行します。

1.    SSH を使用してプライマリノードに接続します。

2.    NameNode のログをチェックして、ディスク領域が不足しているために NameNode がセーフモードになっていることを確認します。これらのログは /var/log/hadoop-hdfs にあります。ディスク領域が十分であれば、ログは次のようになる場合があります。

2020-08-28 19:14:43,540 WARN org.apache.hadoop.hdfs.server.namenode.NameNodeResourceChecker (org.apache.hadoop.hdfs.server.namenode.FSNamesystem$NameNodeResourceMonitor@5baaae4c): Space available on volume '/dev/xvdb2' is 76546048, which is below the configured reserved amount 104857600

ディスク領域が不十分であれば、ログは次のようになる場合があります。

2020-09-28 19:14:43,540 WARN org.apache.hadoop.hdfs.server.namenode.FSNamesystem (org.apache.hadoop.hdfs.server.namenode.FSNamesystem$NameNodeResourceMonitor@5baaae4c): NameNode low on available disk space. Already in safe mode.

3.    次のコマンドを実行して、NameNode がまだセーフモードであることを確認します。

[root@ip-xxx-xx-xx-xxx mnt]# hdfs dfsadmin -safemode get
Safe mode is ON

4.    /mnt から不要なファイルを削除します。

ディレクトリ in/mnt/namenode/current が、1 つのプライマリノードを持つクラスターで大量のスペースを使用している場合は、新しいスナップショット (FsImage) を作成します。その後、古い編集ログを削除します。

例えば、次のアクションを実行するスクリプトを実行します。
新しいスナップショットを生成します。
古い編集ログを Amazon Simple Storage Service (Amazon S3) バケットにバックアップします。
編集ログを削除します。

スクリプト例:

#!/bin/bash
hdfs dfsadmin -safemode enter
hdfs dfsadmin -saveNamespace
sudo su - root -c "hdfs dfs -put /mnt/namenode/current/*edits_[0-9]* s3://doc-example-bucket/backup-hdfs/"
sudo su - root -c "rm -f /mnt/namenode/current/*edits_[0-9]*"
sudo su - root -c "rm -f /mnt/namenode/current/seen*"
hdfs dfsadmin -safemode leave

注: 前述のスクリプトは、進行中の編集のログを削除しません。

5.    /mnt で使用可能なディスク領域の量を確認します。使用可能な領域が 100 MB を超える場合は、セーフモードのステータスをもう一度確認します。その後、セーフモードをオフにします。

[hadoop@ip-xxx-xx-xx-xxx ~]$ hdfs dfsadmin -safemode get
Safe mode is ON
[hadoop@ip-xxx-xx-xx-xxx ~]$ hdfs dfsadmin -safemode leave
Safe mode is OFF

/mnt の使用可能領域が 100 MB 未満の場合は、次のいずれかのアクションを実行します。

さらにファイルを削除する

1.    SSH を使用してプライマリノードに接続します。

2.    /mnt ディレクトリに移動します。

cd /mnt

3.    ディスク容量が最も多く使用されているフォルダを特定します。

sudo du -hsx * | sort -rh | head -10

4.    ディスク領域の問題の原因が見つかるまで、調査を続けます。例えば、var フォルダが大量のディスク領域を使用している場合は、var 内の最大のサブフォルダをチェックします。

cd var
sudo du -hsx * | sort -rh | head -10

5.    ディスク領域を多く使用しているファイルフォルダを特定したら、これらのファイルを削除します。不要になったファイルのみを削除してください。/mnt/var/log/hadoop-hdfs//mnt/var/log/hadoop-yarn/ にある圧縮されたログファイルは、既に Amazon S3 ログ記録バケットにバックアップされています。これらのログファイルは、削除候補として適しています。

6.    不要なファイルを削除したら、セーフモードの状態をもう一度確認します。その後、セーフモードをオフにします。

[hadoop@ip-xxx-xx-xx-xxx ~]$ hdfs dfsadmin -safemode get
Safe mode is ON
[hadoop@ip-xxx-xx-xx-xxx ~]$ hdfs dfsadmin -safemode leave
Safe mode is OFF

破損しているか、または欠落しているブロック/ファイルがないか確認する

1.    次のコマンドを実行すると、クラスターの状態を確認するのに役立つレポートが表示されます。レポートには、レプリケート不足のブロックのパーセンテージと、欠落しているレプリカの数も表示されます。

hdfs fsck /

2.    リスト内の各ファイルについて、次のコマンドを実行して、ファイルの各ブロックの DataNode を見つけます。

hdfs fsck example_file_name -locations -blocks -files

注: example_file_name を自分のファイル名に置き換えてください。

次のようなメッセージが表示されます。

0. BP-762523015-192.168.0.2-1480061879099:blk_1073741830_1006 len=134217728 MISSING!
1. BP-762523015-192.168.0.2-1480061879099:blk_1073741831_1007 len=134217728 MISSING!
2. BP-762523015-192.168.0.2-1480061879099:blk_1073741832_1008 len=70846464 MISSING!

前述のメッセージから、ブロックが保存されている DataNode を見つけることができます。例えば、「192.168.0.2」です。 その後、その DataNode のログを参照して、ブロック ID (blk_xxx) に関連するエラーを検索できます。ノードは頻繁に終了し、その結果としてブロックが欠落します。

3.    破損したファイルを削除するには、セーフモードを終了します。その後、次のコマンドを実行します。

hdfs dfs -rm example_file_name

注: example_file_name を自分のファイル名に置き換えてください。

CloudWatch メトリクスを使用して、HDFS の状態をモニタリングする

次の Amazon CloudWatch メトリクスは、NameNode がセーフモードに移行する潜在的な原因をモニタリングするのに役立ちます。

  • HDFSUtilization: 使用されている HDFS ストレージのパーセンテージ。
  • MissingBlocks: HDFS にレプリカがないブロックの数。これらは破損したブロックである可能性があります。
  • UnderReplicatedBlocks: 1 回以上レプリケートする必要があるブロックの数。

関連情報

HDFS ユーザーガイド (Apache Hadoop のウェブサイトから)

AWS公式
AWS公式更新しました 2年前
コメントはありません

関連するコンテンツ