Warum sind meine Yarn-Anwendungen in Amazon EMR immer noch im Status „Accepted“ (Akzeptiert)?

Lesedauer: 4 Minute
0

Meine Amazon EMR-Aufträge hängen im Status „Accepted“ (Akzeptiert) fest und die Protokolle zeigen „WARN YarnScheduler: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources“.

Kurzbeschreibung

EMR-Aufträge bleiben im Status Accepted (Akzeptiert) hängen, wenn der Cluster nicht über genügend Ressourcen verfügt, um die Auftragsanforderung zu erfüllen. Dies kann aus den folgenden Gründen geschehen:

  • Der YARNMemoryAvailablePercentage ist sehr niedrig und viele der Container stehen noch aus.
  • Die Anwendung kann aufgrund unzureichender Ressourcen auf den Core-Knoten keinen Anwendungsmaster starten. Dies kann bei Amazon EMR 5.19.0 und höher auftreten, mit Ausnahme der Amazon EMR 6.x-Serie.
  • Die Core-Knoten sind fehlerhaft.
  • Ein EMR-Auftrag verbraucht alle Ressourcen.

Lösung

Der Cluster verfügt nicht über ausreichende Ressourcen, um die Auftragsanforderung zu erfüllen

1.    Stelle eine Verbindung zur Resource Manager-Benutzeroberfläche her oder verwende den folgenden Befehl von einem beliebigen Knoten aus, um die Ressourcen zu überprüfen:

yarn top 10

2.    Prüfe, ob die verwendeten Ressourcen fast den Gesamtressourcen entsprechen. Du kannst auch die Amazon CloudWatch-Metriken für YARNMemoryAvailablePercentage und MemoryAvailableMB überprüfen.

4.    Füge dem Cluster bei Bedarf mehr Kapazität hinzu. Du kannst Verwaltete EMR-Skalierung oder automatische Skalierung verwenden, um Kapazität basierend auf der Ressourcenauslastung automatisch hinzuzufügen oder zu verringern.

Auf den Core-Knoten sind nicht genügend Ressourcen vorhanden.

In EMR 5.19.0 und höher, mit Ausnahme der 6.0-Serie, wird der Anwendungsmaster standardmäßig auf dem Core-Knoten ausgeführt. In der EMR 6.x-Serie kann der Anwendungsmaster sowohl auf dem Core- als auch auf dem Aufgabenknoten ausgeführt werden.

Aufgrund der erhöhten Anzahl übermittelter Aufträge und der geringeren Anzahl von Core-Knoten können die Core-Knoten keinen weiteren Anwendungsmaster-Container zuweisen. Der Auftrag könnte also hängen bleiben, obwohl die Aufgabenknoten über genügend Speicher verfügen. In diesem Fall wird möglicherweise die folgende Meldung in den Container-Protokollen angezeigt:

Application is Activated, waiting for resources to be assigned for AM. Last Node which was processed for the application : ip-xxxx:8041 ( Partition : [], Total resource :
<memory:516096, vCores:64>, Available resource : <memory:516096,vCores:64> ). Details : AM Partition = CORE ; Partition Resource =
<memory:516096, vCores:64> ; Queue's Absolute capacity = 100.0 % ; Queue's Absolute used capacity = 99.53497 % ; Queue's Absolute max capacity =100.0 %

Beende in diesem Fall Aufträge, um einige Ressourcen freizugeben. Oder füge dem Cluster weitere Core-Knoten hinzu.

Darüber hinaus kannst du YARN-Beschriftungen in Amazon EMR 5.x deaktivieren.

Die Core-Knoten sind fehlerhaft

Wenn die Core-Knoten keinen Speicherplatz mehr haben und der Mounting-Punkt eine Festplattenauslastung von über 90 % hat, betrachtet Amazon EMR den Knoten als fehlerhaft. Neue Container sind nicht auf fehlerhaften Knoten geplant. In diesem Fall erscheint die folgende Meldung in den Controller-Protokollen der primären Instance. Die Protokolle befinden sich unter /emr/instance-controller/log.

Yarn unhealthy Reason : 1/4 local-dirs usable space is below configured utilization percentage/no more usable space [ /mnt/yarn : used space above threshold of 90.0% ] ; 1/1 log-dirs usable space
is below configured utilization percentage/no more usable space [ /var/log/hadoop-yarn/containers : used space above threshold of 90.0% ]

Um fehlerhafte Knoten zu korrigieren, reduziere die Festplattennutzung, indem du alte Container- oder Spark-Ereignisprotokolle entfernst. Du kannst den Speicher auch dynamisch skalieren, basierend auf der Festplattenauslastung.

Ein Auftrag verbraucht alle Ressourcen, oder Spark-Parameter werden über die Clustergrenzen hinaus konfiguriert

Spark Dynamic Allocation ist in Amazon EMR standardmäßig aktiviert. Wenn ein Spark-Auftrag nicht ordnunsgemäß konfiguriert ist, verbraucht der Auftrag möglicherweise alle Ressourcen des Clusters. Beispielsweise erhältst du diesen Fehler, wenn der Grenzwert für Max Executors (spark.dynamicAllocation.maxExecutors) nicht hoch genug ist. Passe bei Spark-Aufträgen die Speicherbeschränkungen an, um zu vermeiden, dass ein Auftrag alle Ressourcen des Clusters verbraucht.

Die Auftragsannahme schlägt fehl, wenn der Executor-Speicher oder der Treiberspeicher mehr sind als die von Yarn konfigurierten Parameter. Die konfigurierten Yarn-Parameter sind yarn.scheduler.maximum-allocation-mb und yarn.nodemanager.resource.memory-mb. In diesem Fall wird eine Fehlermeldung ähnlich der folgenden angezeigt:

22/01/03 20:05:05 INFO Client: Verifying our application has not  requested more than the maximum memory capability of the cluster (24576
MB per container)
Exception in thread "main" java.lang.IllegalArgumentException: Required executor memory (49152),overhead (6144 MB), and PySpark memory (0 MB) is above the max threshold
 (24576 MB) of this cluster! Please check the values of 'yarn.scheduler.maximum-allocation-mb' and/or 'yarn.nodemanager.resource.memory-mb'.

Gehe wie folgt vor, um dieses Problem zu beheben:


AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren