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

Lesedauer: 7 Minute
0

Der NameNode-Service wechselt in den abgesicherten Modus, wenn ich versuche, eine Apache-Hadoop- oder Apache-Spark-Aufgabe auf einem Amazon-EMR-Cluster auszuführen. Ich habe versucht, den abgesicherten Modus auszuschalten, aber er schaltet sich sofort wieder an. Ich möchte NameNode aus dem abgesicherten Modus holen.

Kurzbeschreibung

Wenn Sie einen Apache-Hadoop- oder Apache-Spark-Auftrag auf einem Amazon-EMR-Cluster ausführen, erhalten Sie ggf. 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"

Der abgesicherte Modus für NameNode ist ein schreibgeschützter Modus für den Cluster des Hadoop Distributed File Systems (HDFS). Im abgesicherten Modus können Sie keine Änderungen am Dateisystem oder an den Blöcken vornehmen. Nachdem die DataNodes gemeldet haben, dass die meisten Dateisystemblöcke verfügbar sind, verlässt der NameNode automatisch den abgesicherten Modus. Der NameNode kann jedoch aus den folgenden Gründen in den abgesicherten Modus wechseln:

  • Der verfügbare Speicherplatz ist geringer als der Speicherplatz, der für das NameNode-Speicherverzeichnis erforderlich ist. Der Speicherplatz, der für das NameNode-Verzeichnis benötigt wird, ist im Parameter dfs.namenode.resource.du.reserved definiert.
  • Der NameNode kann das FSImage und EditLog nicht in den Speicher laden.
  • Der NameNode hat den Blockbericht vom DataNode nicht erhalten.
  • Einige Knoten im Cluster sind möglicherweise ausgefallen. Dadurch sind die Blöcke auf den Knoten nicht verfügbar.
  • Einige Blöcke sind möglicherweise beschädigt.

Überprüfen Sie die die Ursache des Problems im NameNode-Protokollspeicherort /var/log/hadoop-hdfs/.

Lösung

Bevor Sie den abgesicherten Modus verlassen, vergewissern Sie sich, dass Sie wissen und verstehen, warum der NameNode im abgesicherten Modus hängen bleibt. Überprüfen Sie den Status aller DataNodes- und NameNode-Protokolle.

Wichtig: In einigen Fällen kann das manuelle Ausschalten des abgesicherten Modus zum Datenverlust führen.

Führen Sie den folgenden Befehl aus, um den abgesicherten Modus manuell auszuschalten:

sudo -u hdfs hadoop dfsadmin -safemode leave

Führen Sie je nach Ursache des Fehlers einen oder mehrere der folgenden Schritte zur Fehlerbehebung aus, um den abgesicherten Modus zu deaktivieren.

Wechseln zu einem Cluster mit mehreren Primärknoten

Checkpointing erfolgt in Clustern mit einem einzelnen Primärknoten nicht automatisch. Das bedeutet, dass HDFS-Bearbeitungsprotokolle nicht auf einem neuen Snapshot (FsImage) gesichert und entfernt werden. HDFS verwendet Bearbeitungsprotokolle, um Dateisystemänderungen zwischen Snapshots aufzuzeichnen. Es hat sich bewährt, die Bearbeitungsprotokolle manuell aus einem Cluster mit einem einzigen Primärknoten zu entfernen. Wenn Sie die Bearbeitungsprotokolle nicht manuell entfernen, belegen die Protokolle möglicherweise den gesamten Speicherplatz in /mnt. Um dieses Problem zu beheben, starten Sie einen Cluster mit mehreren Primärknoten. Cluster mit mehreren Primärknoten unterstützen die Hochverfügbarkeit für HDFS NameNode. Die hohe Verfügbarkeit für den NameNode löst das Checkpointing-Problem.

Weitere Informationen finden Sie unter Planen und Konfigurieren von Primärknoten.

Entfernen von unnötigen 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 Festplattenspeicher im Verzeichnis /mnt auf einen Wert unter dem in dfs.namenode.resource.du.reserved festgelegten Wert fällt, wechselt NameNode in den abgesicherten Modus. Der Standardwert für dfs.namenode.resource.du.reserved ist 100 MB. Wenn sich der NameNode im abgesicherten Modus 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.    Stellen Sie mithilfe von SSH eine Verbindung zum Primärknoten her.

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

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

Wenn der Festplattenspeicher nicht ausreicht, dann könnten die Protokolle ähnlich wie Folgendes aussehen:

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 der NameNode noch im abgesicherten Modus 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 das Verzeichnis in/mnt/namenode/current auf einem Cluster mit einem Primärknoten viel Speicherplatz beansprucht, erstellen Sie einen neuen Snapshot (FSImage). Entfernen Sie dann die alten Bearbeitungsprotokolle.

Sie führen beispielsweise ein Skript aus, das die folgenden Aktionen ausführt:
Generiert einen neuen Snapshot.
Lädt alte Bearbeitungsprotokolle in einen Bucket von Amazon Simple Storage Service (Amazon S3) hoch.
Entfernt die Bearbeitungsprotokolle.

Beispielskript:

#!/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

Hinweis: Das vorherige Skript entfernt keine Protokolle für laufende Änderungen.

5.    Überprüfen Sie die Menge des verfügbaren Festplattenspeichers in /mnt. Wenn der verfügbare Speicherplatz mehr als 100 MB beträgt, dann überprüfen Sie erneut den Status des abgesicherten Modus. Schalten Sie dann den abgesicherten Modus 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 über weniger als 100 MB verfügbaren Speicherplatz verfügt, führen Sie eine oder mehrere der folgenden Aktionen aus:

Weitere Dateien entfernen

1.    Stellen Sie mithilfe von SSH eine Verbindung zum Primärknoten her.

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, dann überprüfen Sie die größten Unterordner in var:

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

5.    Nachdem Sie festgestellt haben, welcher Dateiordner den Speicherplatz belegt, 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/ sind bereits im Amazon-S3-Protokollierungs-Bucket gesichert. Diese Protokolldateien eignen sich gut zum Löschen.

6.    Nachdem Sie die unnötigen Dateien gelöscht haben, überprüfen Sie den Status vom abgesicherten Modus erneut. Schalten Sie dann den abgesicherten Modus 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

Suchen nach beschädigten oder fehlenden Blöcken/Dateien

1.    Führen Sie den folgenden Befehl aus, um einen Bericht anzuzeigen, mit dem Sie den Zustand des Clusters überprüfen können. Der Bericht enthält auch einen Prozentsatz der zu wenig replizierten Blöcke und die Anzahl der fehlenden Replikate.

hdfs fsck /

2.    Führen Sie für jede Datei in der Liste den folgenden Befehl aus, um den DataNode für jeden Block der Datei zu finden:

hdfs fsck example_file_name -locations -blocks -files

Hinweis: Ersetzen Sie example_file_name durch Ihren Dateinamen.

Die Meldungen, die Sie sehen, ähneln den folgenden Meldungen:

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!

In den vorherigen Nachrichten können Sie den DataNode finden, der den Block gespeichert hat. Beispiel: „192.168.0.2.“ Sie können dann die Protokolle von diesem DataNode sehen, um nach Fehlern zu suchen, die sich auf die Block-ID (blk_xxx) beziehen. Die Knoten werden oft beendet, was zu fehlenden Blöcken führt.

3.    Um die beschädigten Dateien zu löschen, beenden Sie den abgesicherten Modus. Führen Sie dann den folgenden Befehl aus:

hdfs dfs -rm example_file_name

Hinweis: Ersetzen Sie example_file_name durch Ihren Dateinamen.

Verwenden von CloudWatch-Metriken, um den Zustand von HDFS zu überwachen

Die folgenden Amazon-CloudWatch-Metriken können dabei helfen, die möglichen Ursachen für den Wechsel eines NameNode in den abgesicherten Modus zu überwachen:

  • HDFSUtilization: Der Prozentsatz des verwendeten HDFS-Speichers.
  • MissingBlocks: Die Anzahl der Blöcke, für die HDFS keine Replikate hat. Dies könnten beschädigte Blöcke sein.
  • UnderReplicatedBlocks: Die Anzahl der Blöcke, die einmal oder mehrmals repliziert werden müssen.

Ähnliche Informationen

HDFS-Benutzerhandbuch (von der Apache-Hadoop-Website)

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr