Warum geht dem Kernknoten in meinem Amazon EMR-Cluster der Speicherplatz aus?

Lesedauer: 5 Minute
0

Ich führe Apache Spark-Jobs auf einem Amazon EMR-Cluster aus, und der Kernknoten hat fast keinen Speicherplatz mehr.

Behebung

Stellen Sie fest, welche Kernknoten fehlerhaft sind

Knoten, an die mindestens ein Amazon Elastic Block Store (Amazon EBS)-Volume angeschlossen ist, gelten als fehlerhaft, wenn sie eine Festplattenauslastung von mehr als 90 % erreichen. Gehen Sie wie folgt vor, um festzustellen, welche Knoten möglicherweise eine Festplattenauslastung von 90 % erreicht haben:

1.Überprüfen Sie die Metrik der Amazon CloudWatch mRunHealthyNodes. Diese Metrik gibt die Anzahl der fehlerhaften Knoten eines EMR-Clusters an.

**Hinweis:**Sie können einen CloudWatch-Alarm erstellen, um die Metrik der mRunHealthyNodes zu überwachen.

2.Stellen Sie eine Verbindung zum primären Knoten her und greifen Sie auf das Instance-Controller-Protokoll unter /emr/instance-controller/log/instance-controller.log zu. Suchen Sie im Instance-Controller-Protokoll nach InstanceJointStatusMap, um festzustellen, welche Knoten fehlerhaft sind.

Weitere Informationen finden Sie unter Hohe Festplattenauslastung unter Wie löse ich die Fehler „Slave lost“ von ExecutorLostFailure in Spark auf Amazon EMR?

3.Melden Sie sich bei den Kernknoten an und führen Sie dann den folgenden Befehl aus, um festzustellen, ob ein Mount stark ausgelastet ist:

df -h

Entfernen Sie nicht benötigte lokale und temporäre Spark-Anwendungsdateien

Wenn Sie Spark-Jobs ausführen, erstellen Spark-Anwendungen lokale Dateien, die den Rest des Festplattenspeichers auf dem Kernknoten beanspruchen. Wenn der Befehl df -h beispielsweise anzeigt, dass /mnt mehr als 90 % Speicherplatz belegt, überprüfen Sie, welche Verzeichnisse oder Dateien stark ausgelastet sind.

Führen Sie den folgenden Befehl auf dem Kernknoten aus, um die 10 wichtigsten Verzeichnisse zu sehen, die den meisten Festplattenspeicher beanspruchen:

cd /mnt
sudo du -hsx * | sort -rh | head -10

Wenn das Verzeichnis /mnt/hdfs stark ausgelastet ist, überprüfen Sie die HDFS-Nutzung und entfernen Sie alle nicht benötigten Dateien, wie z. B. Protokolldateien. Die Verkürzung des Aufbewahrungszeitraums hilft dabei, die Protokolldateien automatisch aus HDFS zu entfernen.

hdfs dfsadmin -report
hadoop fs -du -s -h /path/to/dir

Reduzieren Sie den Aufbewahrungszeitraum für Spark-Event- und YARN-Container-Protokolle

Eine häufige Ursache für die Verwendung von HDFS ist das Verzeichnis /var/log. Im Verzeichnis /var/log werden Protokolldateien wie Spark-Ereignisprotokolle und YARN-Container-Protokolle gespeichert. Sie können den Aufbewahrungszeitraum für diese Dateien ändern, um Speicherplatz zu sparen.

Der folgende Beispielbefehl zeigt die Verwendung von /var/log/spark an.

Hinweis: /var/log/spark ist das standardmäßige Spark-Ereignisprotokollverzeichnis.

hadoop fs -du -s -h /var/log/spark

Reduzieren Sie den standardmäßigen Aufbewahrungszeitraum für Spark-Job-Verlaufsdateien

Die Dateien mit dem Spark-Jobverlauf befinden sich standardmäßig in /var/log/spark/apps. Wenn der Dateisystem-History-Cleaner ausgeführt wird, löscht Spark Auftragsverlaufsdateien, die älter als sieben Tage sind. Gehen Sie wie folgt vor, um den standardmäßigen Aufbewahrungszeitraum zu verkürzen:

Auf einem laufenden Cluster:

1.Stellen Sie über SSH eine Verbindung zum primären Knoten her.

2.Fügen Sie die folgenden Werte in /etc/spark/conf/spark-defaults.conf hinzu oder aktualisieren Sie sie. Die folgende Konfiguration führt den Cleaner alle 12 Stunden aus. Die Konfiguration löscht Dateien, die älter als 1 Tag sind. Sie können diesen Zeitraum für Ihren individuellen Anwendungsfall in den Parametern spark.history.fs.cleaner.internval und spark.history.fs.cleaner.maxAge anpassen.

------
spark.history.fs.cleaner.enabled true
spark.history.fs.cleaner.interval 12h
spark.history.fs.cleaner.maxAge 1d
------

3.Starten Sie den Spark History Server neu.

Während des Cluster-Starts:

Verwenden Sie die folgende Konfiguration. Sie können den Zeitraum für Ihren individuellen Anwendungsfall in den Parametern spark.history.fs.cleaner.internval und spark.history.fs.cleaner.maxAge anpassen.

{
"Classification": "spark-defaults",
"Properties": {
"spark.history.fs.cleaner.enabled":"true",
"spark.history.fs.cleaner.interval":"12h",
"spark.history.fs.cleaner.maxAge":"1d"
   }
}

Weitere Informationen zu diesen Parametern finden Sie unter Überwachung und Instrumentierung in der Spark-Dokumentation.

Reduzieren Sie die standardmäßige Aufbewahrungsdauer von YARN-Container-Protokollen

Spark-Anwendungsprotokolle, bei denen es sich um die YARN-Container-Protokolle für Ihre Spark-Jobs handelt, befinden sich in /var/log/hadoop-yarn/apps auf dem Kernknoten. Spark verschiebt diese Protokolle nach HDFS, wenn die Ausführung der Anwendung beendet ist. Standardmäßig speichert YARN die Anwendungsprotokolle 48 Stunden lang auf HDFS. Um die Aufbewahrungsfrist zu verkürzen:

1.Stellen Sie mithilfe von SSH eine Verbindung zu den Primär-, Kern- oder Aufgabenknoten her.

2.Öffnen Sie die Datei /etc/hadoop/conf/yarn-site.xml auf jedem Knoten in Ihrem Amazon EMR-Cluster (Primär-, Kern- und Aufgabenknoten).

3.Reduzieren Sie den Wert der Eigenschaft yarn.log-aggregation.retain-seconds auf allen Knoten.

4.Starten Sie den ResourceManager-Daemon neu. Weitere Informationen finden Sie unter Amazon EMR und Anwendungsprozesse anzeigen und neu starten.

Sie können den Aufbewahrungszeitraum auch verkürzen, indem Sie den Cluster neu konfigurieren. Weitere Informationen finden Sie unter Rekonfigurieren einer Instanzgruppe in einem laufenden Cluster.

Reduzieren Sie den Verbrauch von /mnt/yarn

Wenn das Verzeichnis /mnt/yarn stark ausgelastet ist, passen Sie die Benutzer-Cache-Aufbewahrung an oder skalieren Sie die EBS-Volumes auf dem Knoten. Weitere Informationen finden Sie unter Wie kann ich verhindern, dass der Benutzercache eines Hadoop- oder Spark-Jobs zu viel Speicherplatz in Amazon EMR beansprucht?

Größe des Clusters ändern oder Amazon EMR skalieren

Fügen Sie weitere Kernknoten hinzu, um HDFS-Speicherplatzprobleme zu minimieren. Und fügen Sie einen der Kern- oder Aufgabenknoten hinzu, wenn andere Verzeichnisse als HDFS-Verzeichnisse voll werden. Weitere Informationen finden Sie unter Skalierung von Clusterressourcen.

Sie können auch die EBS-Volumes in vorhandenen Knoten erweitern oder ein dynamisches Skalierungsskript verwenden. Weitere Informationen finden Sie im Folgenden:


Relevante Informationen

Cluster-Hardware und Netzwerk konfigurieren

AWS-Konfiguration

Arbeiten mit Speicher- und Dateisystemen

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr