Ongoing service disruptions
For the most recent update on ongoing service disruptions affecting the AWS Middle East (UAE) Region (ME-CENTRAL-1), refer to the AWS Health Dashboard. For information on AWS Service migration, see How do I migrate my services to another region?
Amazon EMR クラスターの NameNode サービスのセーフモードを無効にする方法を教えてください。
Amazon EMR クラスターで Apache Hadoop または Apache Spark ジョブを実行しようとすると、NameNode サービスがセーフモードになります。セーフモードをオフにしましたが、すぐにオンに戻ります。
簡単な説明
Amazon EMR クラスターで Apache Hadoop または Apache Spark ジョブを実行すると、次のいずれかのエラーメッセージが表示されることがあります。
- "Cannot create file/user/test.txt._COPYING_.Name node is in safe mode."
- "org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot delete /user/hadoop/.sparkStaging/application_15########_0001.Name node is in safe mode.It was turned on manually.Use "hdfs dfsadmin -safemode leave" to turn safe mode off.NamenodeHostName:ip-###-##-##-##.ec2.internal"
NameNode のセーフモードは、Hadoop 分散ファイルシステム (HDFS) クラスターの読み取り専用モードです。セーフモードでは、ファイルシステムやブロックを変更することはできません。
DataNodes がほとんどのファイルシステムブロックが使用可能であることを報告すると、NameNode は自動的にセーフモードを終了します。ただし、次の理由により NameNode が再びセーフモードになる場合があります。
- 使用可能なスペースが、NameNode ストレージディレクトリに必要なスペースよりも少ない。dfs.namenode.resource.du.reserved パラメータによって、NameNode ディレクトリに必要なスペースが定義されている。
- NameNode が FSImage と EditLog をメモリにロードできない。
- NameNode が DataNode からブロックレポートを受信しなかった。
- クラスター内の一部のノードが停止し、ノード上のブロックが使用できない。
- 一部のブロックが壊れている可能性がある。
問題の根本原因を NameNode ログの場所 (/var/log/hadoop-hdfs/) で確認してください。
解決策
セーフモードを終了する前に、NameNode がセーフモードのままになっている理由を確認してください。すべての DataNode ログと NameNode ログのステータスを確認してください。
重要: セーフモードを手動でオフにすると、データが失われる場合があります。
セーフモードを手動でオフにするには、次のコマンドを実行します。
sudo -u hdfs hadoop dfsadmin -safemode leave
エラーの根本原因に応じて、次の 1 つまたは複数のトラブルシューティング手順を実行して、セーフモードをオフにしてください。
複数のプライマリノードを持つクラスタに切り替える
プライマリノードが 1 つしかないクラスターでは、チェックポイントは自動的に行われません。そのため、HDFS は編集ログを新しいスナップショット (FSImage) にバックアップして自動的に削除することはできません。HDFS は編集ログを使用して、スナップショット間のファイルシステムの変更を記録します。プライマリノードが 1 つしかないクラスターから編集ログを手動で削除するのがベストプラクティスです。編集ログを手動で削除しないと、ログが /mnt 内のすべてのディスク容量を使用する可能性があります。この問題を解決するには、複数のプライマリノードを持つクラスターを起動します。複数のプライマリノードを持つクラスターは、HDFS NameNode の高可用性をサポートします。
/mnt から不要なファイルを削除する
dfs.namenode.resource.du.reserved パラメータは、/mnt の使用可能な最小ディスク容量を指定します。/mnt の使用可能なディスク容量が dfs.namenode.resource.du.reserved に設定されている値を下回ると、NameNode はセーフモードに入ります。dfs.namenode.resource.du.reserved のデフォルト値は 100 MB です。セーフモードがオンの場合、NameNode はすべてのファイルシステムとブロックの変更をブロックします。この問題を解決するには、/mnt から不要なファイルを削除する必要があります。
不要になったファイルを削除するには、次の手順を実行します。
-
NameNode ログをチェックして、ディスク容量が不足しているために NameNode がセーフモードになっていることを確認します。ディスク容量が十分にある場合、ログは次の例のようになります。
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. -
NameNode がまだセーフモードになっていることを確認するには、次のコマンドを実行します。
[root@ip-###-##-##-### mnt]# hdfs dfsadmin -safemode getSafe mode is ON -
/mnt から不要なファイルを削除します。プライマリノードが 1 つのクラスタで、/mnt/namenode/current ディレクトリが大量のスペースを使用している場合は、新しいスナップショット (FSImage) を作成します。次に、古い編集ログを削除します。
-
/mnt の使用可能なディスク容量を確認します。空き容量が 100 MB を超える場合は、セーフモードの状態をもう一度確認してください。
[hadoop@ip-###-##-##-### ~]$ hdfs dfsadmin -safemode get出力例:
Safe mode is ON -
セーフモードをオフにする:
[hadoop@ip-###-##-##-### ~]$ hdfs dfsadmin -safemode leave出力例:
Safe mode is OFF
**/mnt ** の空き容量がまだ 100 MB 未満の場合は、次の 1 つまたは複数のアクションを実行します。
- さらにファイルを削除します。
- /mnt ボリュームのサイズを増やします。
さらにファイルを削除する
次の手順を実行します。
-
/mnt ディレクトリに移動します。
cd /mnt -
ディスク容量を最も多く使用しているフォルダを特定します。
sudo du -hsx * | sort -rh | head -10 -
ディスク容量を最も多く使用しているフォルダ内の最も大きいサブフォルダを確認します。例えば、var フォルダが大量のディスク容量を使用している場合、var 内の最も大きいサブフォルダを確認します。
cd varsudo du -hsx \* | sort -rh | head -10 -
一番大きいファイルを最初に削除します。不要になったファイルのみを削除するようにしてください。Amazon S3 ログ記録バケットには、/mnt/var/log/hadoop-hdfs/ と /mnt/var/log/hadoop-yarn/ からの圧縮ログファイルのバックアップコピーが既に保存されています。これらのログファイルは安全に削除できます。
-
不要なファイルを削除したら、セーフモードの状態をもう一度確認してください。次に、セーフモードをオフにします。
[hadoop@ip-###-##-##-### ~]$ hdfs dfsadmin -safemode get出力例:
Safe mode is ON -
セーフモードをオフにする:
[hadoop@ip-###-##-##-### ~]$ hdfs dfsadmin -safemode leave出力例:
Safe mode is OFF
破損または欠落しているブロックやファイルを確認する
次の手順を実行します。
- クラスターの状態を確認するには、次のコマンドを実行します。
注: 出力レポートには、レプリケートされたブロックの割合と欠落しているレプリカの数も表示されます。hdfs fsck / - ファイルの各ブロックの DataNode を検索するには、リスト内の各ファイルに対して次のコマンドを実行します。
注: example_file_name は実際のファイル名に置き換えてください。hdfs fsck example_file_name -locations -blocks -files
出力例:
前の出力例は、どの DataNode がブロックを格納しているかを示しています。例: 192.168.0.2DataNode のログで、特定のブロック ID (blk_##) に関連するエラーがないかどうかを確認できます。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!
注: ノードが予期せず終了したために、ブロックが欠落することがよくあります。 - 破損したファイルを削除するには、セーフモードを終了して次のコマンドを実行します。
注: example_file_name は実際のファイル名に置き換えてください。hdfs dfs -rm example_file_name
CloudWatch メトリクスを使用して HDFS の状態をモニタリングする
次の Amazon CloudWatch メトリクスを使用して、NameNode がセーフモードに入る原因を特定します。
- 使用されている HDFS ストレージの割合を確認するには、HDFSUtilization を確認します。
- HDFS にレプリカがないブロックの数を確認するには、MissingBlocks を確認します。これらは壊れたブロックである可能性があります。
- レプリケーションが必要なブロックの数を確認するには、UnderReplicatedBlocks を確認します。
関連情報
HDFS ユーザーガイド (Apache Hadoop のウェブサイト)
関連するコンテンツ
- 質問済み 8年前
