Warum verwendet die YARN-Anwendung weiterhin Ressourcen, nachdem der Spark-Auftrag, den ich auf Amazon EMR ausgeführt habe, abgeschlossen ist?
Ich führe ein Jupyter- oder Zeppelin-Notebook auf meinem Amazon EMR-Cluster aus. Die YARN-Anwendung wird weiter ausgeführt,auch nachdem der von mir eingereichte Apache Spark-Auftrag abgeschlossen ist.
Kurze Beschreibung
Wenn Sie ein Spark-Notebook in Zeppelin oder Jupyter ausführen, startet Spark einen Interpreter. Der Interpreter erstellt eine YARN-Anwendung. Bei dieser Anwendung handelt es sich um den Spark-Treiber, der angezeigt wird, wenn Sie Anwendungen auflisten. Der Treiber wird nicht beendet, wenn Sie die Ausführung eines Auftrags vom Notebook aus beenden. Der Spark-Treiber bleibt standardmäßig aktiv, sodass er Anwendungscontainer anfordern kann, wenn der Code spontan Code ausgeführt wird. Der Nachteil ist, dass die YARN-Anwendung ggf. Ressourcen verwendet, die andere Jobs benötigen. Um dieses Problem zu beheben, können Sie die YARN-Anwendung manuell beenden. Alternativ können Sie einen Timeout-Wert festlegen, der die Anwendung automatisch stoppt.
Lösung
Zeppelin
Option 1: Starten Sie den Spark-Interpreter neu
Bevor Sie anfangen, stellen Sie sicher, dass Sie über die Berechtigung zum Neu-starten des Interpreters in Zeppelin verfügen.
1. Öffnen Sie Zeppelin.
2. Wählen Sie aus der Dropdown-Liste neben dem Benutzernamen die Option Interpreter aus.
3. Suchen Sie den Spark-Interpreter und wählen Sie dann Neustart aus. Zeppelin beendet den YARN-Job, wenn der Interpreter neu startet.
Option 2: Stoppen Sie den YARN-Job manuell
Bevor Sie beginnen, sollten Sie Folgendes beachten:
- Sie haben SSH-Zugriff auf den Amazon EMR-Cluster.
- Sie haben die Berechtigung, YARN-Befehle auszuführen.
Verwenden Sie den Befehl -kill, um die Anwendung zu beenden. Ersetzen Sie im folgenden Beispiel Applikation_id durch Ihre Anwendungs-ID.
yarn application -kill application_id
Option 3: Legen Sie einen Interpreter-Timeout-Wert fest
Zeppelin-Versionen 0.8.0 und höher (verfügbar in Amazon EMR-Versionen 5.18.0 und höher) enthalten einen Lebenszyklus-Manager für Interpreter. Verwenden Sie die TimeoutLifecycleManager-Einstellung, um Interpreter nach einem angegebenen Leerlauf-Timeout-Zeitraum zu beenden:
1. Erstellen Sie eine Datei etc/zeppelin/conf/zeppelin-site.xml mit dem folgenden Inhalt. In diesem Beispiel ist der Timeout-Zeitraum auf 120.000 Millisekunden (2 Minuten) festgelegt. Wählen Sie einen Zeitüberschreitungswert, der für Ihre Umgebung geeignet ist.
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>zeppelin.interpreter.lifecyclemanager.class</name> <value>org.apache.zeppelin.interpreter.lifecycle.TimeoutLifecycleManager</value> <description>This is the LifecycleManager class for managing the lifecycle of interpreters. The interpreter terminates after the idle timeout period.</description> </property> <property> <name>zeppelin.interpreter.lifecyclemanager.timeout.checkinterval</name> <value>60000</value> <description>The interval for checking whether the interpreter has timed out, in milliseconds.</description> </property> <property> <name>zeppelin.interpreter.lifecyclemanager.timeout.threshold</name> <value>120000</value> <description>The idle timeout limit, in milliseconds.</description> </property> </configuration>
2. Führen Sie die folgenden Befehle aus, um Zeppelin neu zu starten:
$ sudo stop zeppelin
$ sudo start zeppelin
Jupyter
Option 1: Fahren Sie das Notebook manuell herunter
Nachdem der Job abgeschlossen ist, verwenden Sie eine der folgenden Methoden, um den Kernel in der Jupyter-Benutzeroberfläche zu stoppen:
- Öffnen Sie in der Jupyter-Notebook-Benutzeroberfläche das Menü Datei und wählen Sie dann Schließen und anhalten aus.
- Öffnen Sie im Jupyter-Dashboard die Registerkarte In Ausführung. Wählen Sie Herunterfahren für das Notebook, das Sie stoppen möchten.
Option 2: Fahren Sie den Kernel manuell herunter
Öffnen Sie auf der Jupyter-Notebook-Benutzeroberfläche das Menü Kernel und wählen Sie dann Herunterfahren aus.
Option 3: Konfigurieren Sie das Timeout-Attribut
Wenn Sie die Notebook-Registerkarte oder das Browserfenster schließen, bevor Sie den Kernel herunterfahren, wird der YARN-Job weiterhin ausgeführt. Um dies zu verhindern, konfigurieren Sie das Attribut NotebookApp.shutdown_no_activity_timeout. Dieses Attribut beendet den YARN-Job nach einem angegebenen Leerlauf-Timeout-Zeitraum, selbst wenn Sie die Registerkarte oder das Browserfenster schließen.
Gehen Sie wie folgt vor, um das Attribut NotebookApp.shutdown_no_activity_timeout zu konfigurieren:
1. Öffnen Sie die Datei /etc/jupyter/jupyter_notebook_config.py auf dem Hauptknoten und fügen Sie dann einen Eintrag ähnlich dem folgenden hinzu. In diesem Beispiel ist das Timeout-Attribut auf 120 Sekunden festgelegt. Wählen Sie einen Zeitüberschreitungswert, der für Ihre Umgebung geeignet ist.
c.NotebookApp.shutdown_no_activity_timeout = 120
2. Führen Sie die folgenden Befehle aus, um jupyterhub neu zu starten:
sudo docker stop jupyterhub
sudo docker start jupyterhub
Weitere Informationen
Wichtige Aspekte bei der Verwendung von Zeppelin auf Amazon EMR
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 3 Jahren
- Warum wird ein Amazon EMR-Schritt ausgeführt, obwohl meine Anwendung auf dem YARN abgeschlossen ist?AWS OFFICIALAktualisiert vor 5 Monaten
- AWS OFFICIALAktualisiert vor 2 Jahren