Direkt zum Inhalt

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

Lesedauer: 4 Minute
0

Ich möchte Apache-Spark-Aufträge auf einem Amazon-EMR-Cluster ausführen, aber auf dem Core-Knoten ist fast kein Speicherplatz mehr verfügbar.

Lösung

Feststellen, ob du fehlerhafte Core-Knoten hast

Wenn Knoten, an die mindestens ein Amazon Elastic Block Store (Amazon EBS)-Volume angefügt ist, eine Festplattenauslastung von über 90 % erreichen, gelten sie als fehlerhaft. Gehe wie folgt vor, um zu ermitteln, welche Knoten eine Festplattenauslastung von 90 % erreicht haben:

  1. Überprüfe die Amazon-CloudWatch-Metrik MRUnhealthyNodes. Diese Metrik zeigt die Anzahl der fehlerhaften Knoten in einem EMR-Cluster.
    Hinweis: Du kannst auch einen CloudWatch-Alarm erstellen, um die MRUnhealthyNodes-Metrik zu überwachen.
  2. Stelle eine Verbindung zum Primärknoten her und greife auf das Instance-Controller-Protokoll unter /emr/instance-controller/log/instance-controller.log zu.
  3. Suche im Instance-Controller-Protokoll nach InstanceJointStatusMap, um festzustellen, welche Knoten fehlerhaft sind.
    Weitere Informationen findest du im Abschnitt Hohe Festplattenauslastung aufgrund eines fehlerhaften Knotens unter Wie behebe ich den Fehler „ExecutorLostFailure: Slave lost“ in Spark auf Amazon EMR?
  4. Melde dich bei den Core-Knoten an und führe dann den folgenden Befehl aus, um festzustellen, ob ein Mount eine hohe Auslastung aufweist:
    df -h

Entfernen nicht benötigter lokaler und temporärer Spark-Anwendungsdateien

Wenn du Spark-Aufträge ausführst, erstellen Spark-Anwendungen lokale Dateien, die den verbleibenden Speicherplatz auf dem Core-Knoten belegen. Wenn der Befehl df -h beispielsweise anzeigt, dass /mnt mehr als 90 % Speicherplatz belegt, überprüfe, welche Verzeichnisse oder Dateien eine hohe Auslastung aufweisen.

Führe den folgenden Befehl auf dem Core-Knoten aus, um die 10 wichtigsten Verzeichnisse anzuzeigen, die den meisten Speicherplatz belegen:

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

Wenn das Verzeichnis /mnt/hdfs eine hohe Auslastung aufweist, überprüfe die Verwendung des Hadoop Distributed File System (HDFS) und entferne alle nicht benötigten Dateien, z. B. Protokolldateien. Führe den folgenden Befehl aus, um die Speicherplatzauslastung für ein bestimmtes Verzeichnis zu überprüfen:

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

Hinweis: Ersetze /path/to/dir durch den Pfad zu dem Verzeichnis, für das du die Speicherplatzauslastung überprüfen möchtest.

Reduziere den Aufbewahrungszeitraum für Spark-Ereignis- und YARN-Container-Protokolle

Das Verzeichnis /var/log speichert Protokolldateien wie Spark-Ereignisprotokolle und YARN-Container-Protokolle. Um die Protokolldateien automatisch aus HDFS zu entfernen, reduziere den Aufbewahrungszeitraum.

Den standardmäßigen Aufbewahrungszeitraum für Spark-Auftrags-Verlaufsdateien reduzieren

Standardmäßig befinden sich die Verlaufsdateien für Spark-Aufträge in /var/log/spark/apps. Wenn die Dateisystem-Verlaufsbereinigung ausgeführt wird, löscht Spark Auftragsverlaufsdateien, die älter als sieben Tage sind.

Gehe wie folgt vor, um den Standard-Aufbewahrungszeitraum auf einem aktuelle ausgeführten Cluster zu reduzieren:

  1. Verwende SSH, um eine Verbindung zum Primärknoten herzustellen.
  2. Füge die folgenden Werte in /etc/spark/conf/spark-defaults.conf hinzu oder aktualisiere sie:
    ------spark.history.fs.cleaner.enabled true
    spark.history.fs.cleaner.interval 12h
    spark.history.fs.cleaner.maxAge 1d
    ------
    Bei der vorherigen Konfiguration wird die Bereinigung alle 12 Stunden ausgeführt. Die Konfiguration löscht Dateien, die älter als 1 Tag sind. Du kannst diesen Zeitraum in den Parametern spark.history.fs.cleaner.internval und spark.history.fs.cleaner.maxAge anpassen.
  3. Starte den Spark-Verlaufsserver neu.

Verwende die folgende Konfiguration, um den Standard-Aufbewahrungszeitraum für Spark-Auftrags-Verlaufsdateien zu reduzieren, wenn du den Cluster startest:

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

Du kannst diesen Zeitraum in den Parametern spark.history.fs.cleaner.interval und spark.history.fs.cleaner.maxAge anpassen.

Weitere Informationen zu diesen Parametern findest du unter Monitoring and instrumentation (Überwachung und Instrumentierung) auf der Apache Spark-Website.

Reduzieren des standardmäßigen Aufbewahrungszeitraums von YARN-Container-Protokollen

Spark-Anwendungsprotokolle sind die YARN-Container-Protokolle für Spark-Aufträge, die sich in /var/log/hadoop-yarn/apps auf dem Core-Knoten befinden. Spark verschiebt diese Protokolle in HDFS, wenn die Ausführung der Anwendung beendet ist. Standardmäßig speichert YARN die Anwendungsprotokolle 48 Stunden lang auf HDFS. Gehe wie folgt vor, um den Aufbewahrungszeitraum zu verkürzen:

  1. Verwende SSH, um eine Verbindung zu den Primär-, Core- oder Aufgabenknoten herzustellen.
  2. Öffne die Datei /etc/hadoop/conf/yarn-site.xml auf jedem Knoten im EMR-Cluster (Primär-, Core- und Aufgabenknoten).
  3. Reduziere den Wert der Eigenschaft yarn.log-aggregation.retain-seconds auf allen Knoten.
  4. Starte den ResourceManager-Daemon neu.

Du kannst den Cluster auch neu konfigurieren, um den Aufbewahrungszeitraum zu verkürzen.

Reduzieren der Auslastung von /mnt/yarn

Wenn die Datenträgernutzung im Verzeichnis /mnt/yarn hoch ist, passe entweder die Aufbewahrung des Benutzer-Caches an oder skaliere die EBS-Volumes auf dem Knoten. Weitere Informationen findest du unter Wie stoppe ich den Benutzer-Cache eines Hadoop- oder Spark-Auftrags, damit der Cache nicht zu viel Speicherplatz in Amazon EMR belegt?

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

Skaliere die Anzahl der Core-Knoten, um HDFS-Speicherplatzprobleme zu vermeiden. Und wenn andere Verzeichnisse als HDFS-Verzeichnisse voll werden, skaliere die Anzahl der Core- oder Aufgabenknoten. Weitere Informationen findest du unter Amazon-EMR-Clusterskalierung zur Anpassung an sich ändernde Workloads nutzen.

Du kannst auch die EBS-Volumes in vorhandenen Knoten erweitern oder ein dynamisches Skalierungsskript verwenden. Weitere Informationen findest du unter Wie behebe ich den Phasenfehler „no space left on device“ bei einem Apache-Spark-Auftrag auf Amazon EMR?

Ähnliche Informationen

Konfigurierung der Amazon-EMR-Cluster-Hardware und des Netzwerks

HDFS-Konfiguration

Arbeiten mit Speicher- und Dateisystemen mit Amazon EMR

AWS OFFICIALAktualisiert vor 5 Monaten