Wie stoppe ich den Benutzer-Cache eines Hadoop- oder Spark-Auftrags, damit der Cache nicht zu viel Speicherplatz in Amazon EMR belegt?
Der Benutzer-Cache für meinen Apache-Hadoop- oder Apache-Spark-Auftrag belegt den gesamten Speicherplatz auf der Partition. Der Amazon-EMR-Auftrag schlägt fehl oder der HDFS-NameNode-Service befindet sich im abgesicherten Modus.
Kurzbeschreibung
In einem Amazon-EMR-Cluster ist YARN so konfiguriert, dass Aufträge Cache-Daten in /mnt/yarn/usercache schreiben können. Wenn Sie große Datenmengen verarbeiten oder mehrere Aufträge gleichzeitig ausführen, kann das /mnt-Dateisystem voll werden. Dies führt dazu, dass der Knotenmanager auf einigen Knoten ausfällt und der Auftrag abstürzt oder fehlschlägt.
Verwenden Sie eine der folgenden Methoden, um dieses Problem zu beheben:
- Wenn Sie keine Aufträge mit langer Laufzeit oder Streaming-Aufträge haben, passen Sie die Einstellungen für die Speicherdauer des Benutzer-Caches für YARN NodeManager an.
- Wenn Sie Aufträge mit langer Laufzeit oder Streaming-Aufträge haben, skalieren Sie die Amazon Elastic Block Store (Amazon EBS) Volumes hoch.
Behebung
Anpassen der Einstellungen für die Speicherdauer des Benutzer-Caches für NodeManager
Die folgenden Attribute definieren die Einstellungen für die Cache-Bereinigung:
- yarn.nodemanager.localizer.cache.cleanup.interval-ms: Dies ist das Intervall der Cache-Bereinigung. Der Standardwert beträgt 600 000 Millisekunden. Nach diesem Intervall werden Dateien gelöscht, die nicht von laufenden Containern verwendet werden, wenn die Cache-Größe den in yarn.nodemanager.localizer.cache.target-size-mb eingestellten Wert überschreitet.
- yarn.nodemanager.localizer.cache.target-size-mb: Dies ist der maximal zulässige Festplattenspeicher für den Cache. Der Standardwert beträgt 10 240 MB. Wenn die Festplattengröße des Caches diesen Wert überschreitet, werden Dateien, die nicht von laufenden Containern verwendet werden, in dem in yarn.nodemanager.localizer.cache.cleanup.interval-ms festgelegten Intervall gelöscht.
Gehen Sie wie folgt vor, um das Bereinigungsintervall und die maximale Festplattenspeichergröße auf Ihrem Cluster festzulegen:
-
Öffnen Sie /etc/hadoop/conf/yarn-site.xml auf jedem Kern- und Aufgabenknoten.
-
Reduzieren Sie die Werte für yarn.nodemanager.localizer.cache.cleanup.interval und yarn.nodemanager.localizer.cache.target-size-mb für jeden Kern- und Aufgabenknoten.
Zum Beispiel:
sudo vim /etc/hadoop/conf/yarn-site.xmlyarn.nodemanager.localizer.cache.cleanup.interval-ms 400000 yarn.nodemanager.localizer.cache.target-size-mb 5120
-
Führen Sie die folgenden Befehle auf jedem Kern- und Aufgabenknoten aus, um NodeManager neu zu starten:
EMR 5.29 und frühersudo stop hadoop-yarn-nodemanager sudo start hadoop-yarn-nodemanager
EMR 5.30.0 und höher
sudo stop hadoop-yarn-nodemanager.service sudo systemctl start hadoop-yarn-nodemanager.service
-
Um das Bereinigungsintervall und die maximale Festplattenspeichergröße in einem neuen Cluster festzulegen, fügen Sie beim Starten des Clusters ein Konfigurationsobjekt wie das folgende hinzu:
[ { "Classification": "yarn-site", "Properties": { "yarn.nodemanager.localizer.cache.cleanup.interval-ms": "400000", "yarn.nodemanager.localizer.cache.target-size-mb": "5120" } } ]
Denken Sie daran, dass der Löschservice bei laufenden Containern nicht abgeschlossen wird. Das bedeutet, dass selbst nach Anpassung der Einstellungen für die Speicherdauer des Benutzer-Caches möglicherweise immer noch Daten in den folgenden Pfad gelangen und das Dateisystem belegen:
{'yarn.nodemanager.local-dirs'}/usercache/user/appcache/application_id ,
Hochskalieren der EBS Volumes auf den EMR-Cluster-Knoten
Informationen zur Skalierung des Speichers auf einem laufenden EMR-Cluster finden Sie unter Dynamically scale up storage on Amazon EMR clusters.
Um den Speicher auf einem neuen EMR-Cluster zu skalieren, geben Sie bei der Erstellung des EMR-Clusters eine höhere Volume-Größe an. Sie können dies auch tun, wenn Sie einem vorhandenen Cluster Knoten hinzufügen:
- Amazon-EMR-Version 5.22.0 und höher: Die Standardmenge an EBS-Speicher erhöht sich je nach Größe der Amazon Elastic Compute Cloud (Amazon EC2) Instance. Weitere Informationen zur Speichergröße und Anzahl der Volumes, die jedem Instance-Typ zugewiesen sind, finden Sie unter Amazon-EBS-Standardspeicher für Instances.
- Amazon-EMR-Version 5.21 und niedriger: Die Standardgröße des EBS-Volumes beträgt 32 GB. 27 GB sind für die ** ** /mnt-Partition reserviert. HDFS, YARN, der Benutzer-Cache und alle Anwendungen verwenden die /mnt-Partition. Erhöhen Sie die Größe Ihres EBS-Volumes nach Bedarf, beispielsweise auf 100 bis 500 GB. Sie können auch mehrere EBS-Volumes angeben, die als /mnt1 oder /mnt2 usw. gemountet werden.
Für Spark-Streaming-Aufträge können Sie auch RDD.unpersist () ausführen, wenn Sie die Daten nicht mehr benötigen. Alternativ können Sie explizit System.gc() in Scala oder sc._jvm.System.gc () in Python aufrufen, um JVM Garbage Collection zu starten und die Zwischenspeicherdateien zu entfernen.
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor 3 Jahren
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor 3 Jahren