Wie kann ich den Safemode für den NameNode-Service auf meinem Amazon-EMR-Cluster deaktivieren?

Letzte Aktualisierung: 03.09.2021

Wenn ich versuche, einen Apache-Hadoop- oder Apache-Spark-Aufttrag auf einem Amazon-EMR-Cluster auszuführen, erhalte ich eine der folgenden Fehlermeldungen:

  • file/user/test.txt._COPYING_ kann nicht erstellt werden. NameNode befindet sich im abgesicherten Modus.
  • org.apache.hadoop.hdfs.server.namenode.SafeModeException: Kann /user/hadoop/.sparkStaging/application_15xxxxxxxx_0001 nicht löschen. NameNode befindet sich im abgesicherten Modus. Er wurde manuell eingeschaltet. Verwenden Sie „hdfs dfsadmin -safemode leave“, um den abgesicherten Modus auszuschalten. NamenodeHostName:ip-xxx-xx-xx-xx.ec2.internal

Ich habe versucht, Safemode auszuschalten, aber es schaltet sich sofort wieder an. Ich möchte NameNode aus Safemode holen.

Kurzbeschreibung

Safemode für NameNode ist im Wesentlichen ein schreibgeschützter Modus für den Hadoop Distributed File System (HDFS)-Cluster. NameNode kann aus verschiedenen Gründen in den Safemode gelangen, z. B.:

  • Der verfügbare Speicherplatz ist geringer als für das NameNode-Speicherverzeichnis erforderlich. Der für das NameNode-Verzeichnis benötigte Speicherplatz ist im Parameter dfs.namenode.resource.du.reserved definiert.
  • NameNode kann das FSImage und EditLog nicht in den Speicher laden.
  • NameNode hat den Blockbericht von DataNode nicht erhalten.

Überprüfen Sie die NameNode-Protokolle, um die Ursache des Problems im Protokollspeicherort /var/log/hadoop-hdfs/ zu finden.

Auflösung

Probieren Sie eine oder mehrere der folgenden Optionen zur Fehlerbehebung basierend auf Ihrem Anwendungsfall aus.

Wechseln Sie zu einem Cluster mit mehreren Hauptknoten.

Checkpointing erfolgt in Clustern mit einem einzelnen Hauptknoten nicht automatisch. Dies bedeutet, dass HDFS-Bearbeitungsprotokolle nicht auf einem neuen Snapshot (FsImage) gesichert und entfernt werden. HDFS verwendet Bearbeitungsprotokolle, um Dateisystemänderungen zwischen Snapshots aufzuzeichnen. Wenn Sie einen Cluster mit einem einzelnen Hauptknoten haben und die Bearbeitungsprotokolle nicht manuell entfernen, können diese Protokolle schließlich den gesamten Speicherplatz in /mnt belegen. Um dieses Problem zu beheben, starten Sie einen Cluster mit mehreren Hauptknoten. Cluster mit mehreren Hauptknoten unterstützen hohe Verfügbarkeit für HDFS NameNode, wodurch das Checkpointing-Problem behoben wird. Weitere Informationen finden Sie unter Planen und Konfigurieren von Hauptknoten.

Entfernen unnötiger Dateien aus /mnt

Der minimal verfügbare Festplattenspeicher für /mnt wird durch den Parameter dfs.namenode.resource.du.reserved angegeben. Wenn der verfügbare Speicherplatz im Verzeichnis /mnt auf einen Wert unter dem in dfs.namenode.resource.du.reserved festgelegten Wert fällt, wechselt NameNode in den Safemode. Der Standardwert für dfs.namenode.resource.du.reserved ist 100 MB. Wenn sich NameNode im Safemode befindet, sind keine Dateisystem- oder Blockänderungen erlaubt. Daher kann das Entfernen der unnötigen Dateien aus /mnt helfen, das Problem zu beheben. Gehen Sie wie folgt vor, um die Dateien zu löschen, die Sie nicht mehr benötigen:

1.    Verbinden Sie sich mittels SSH mit dem Hauptknoten.

2.    Überprüfen Sie die NameNode-Protokolle, um zu überprüfen, ob NameNode aufgrund von unzureichendem Speicherplatz im Safemode ist. Diese Protokolle befinden sich in /var/log/hadoop-hdfs. Die Protokolle könnten ähnlich wie Folgendes aussehen, wenn der Festplattenspeicher ausreicht:

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

Die Protokolle könnten ähnlich wie Folgendes aussehen, wenn der Festplattenspeicher nicht ausreicht:

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.    Vergewissern Sie sich, dass NameNode noch im Safemode ist, indem Sie den folgenden Befehl ausführen:

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

4.    Löschen Sie unnötige Dateien aus /mnt. Wenn beispielsweise auf einem Cluster mit einem Hauptknoten das Verzeichnis in /mnt/namenode/current viel Speicherplatz verwendet, können Sie einen neuen Snapshot (FsImage) erstellen und dann die alten Bearbeitungsprotokolle entfernen.

Das folgende Beispielskript generiert einen neuen Snapshot, sichert alte Bearbeitungsprotokolle in einem Amazon Simple Storage Service (Amazon S3)-Bucket und entfernt dann die Bearbeitungsprotokolle. Das Skript entfernt keine Protokolle für laufende Bearbeitungen. Führen Sie das folgende Skript als Hadoop-Benutzer aus:

#!/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.    Überprüfen Sie die Menge des verfügbaren Festplattenspeichers in /mnt. Wenn der verfügbare Speicherplatz mehr als 100 MB beträgt, überprüfen Sie den Status vom Safemode erneut und schalten Sie ihn dann aus:

[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

Falls /mnt immer noch weniger als 100 MB verfügbaren Speicherplatz hat, führen Sie eine oder mehrere der folgenden Aktionen aus:

Weitere Dateien entfernen

1.    Verbinden Sie sich mittels SSH mit dem Hauptknoten.

2.    Navigieren Sie zum Verzeichnis /mnt:

cd /mnt

3.    Bestimmen Sie, welche Ordner den meisten Festplattenspeicher belegen:

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

4.    Forschen Sie weiter nach, bis Sie die Ursache des Speicherplatzproblems gefunden haben. Wenn z. B. der Ordner var viel Speicherplatz belegt, überprüfen Sie die größten Unterordner in var:

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

5.    Nachdem Sie festgestellt haben, welche Dateien/Ordner den Speicherplatz belegen, löschen Sie diese Dateien. Stellen Sie sicher, dass Sie nur Dateien löschen, die Sie nicht mehr benötigen. Die komprimierten Protokolldateien in /mnt/var/log/hadoop-hdfs/ und /mnt/var/log/hadoop-yarn/, die bereits im Amazon-S3-Protokollierungs-Bucket gesichert sind, sind gute Kandidaten für das Löschen.

6.    Nachdem Sie die unnötigen Dateien gelöscht haben, überprüfen Sie den Status von Safemode erneut und schalten ihn dann aus:

[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

Hadoop-Dokumentation für HDFS-Benutzerhandbuch

War dieser Artikel hilfreich?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?