Direkt zum Inhalt

Warum verwendet die YARN-Anwendung weiterhin Ressourcen, nachdem der Spark-Auftrag, den ich auf Amazon EMR ausgeführt habe, abgeschlossen ist?

Lesedauer: 4 Minute
0

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

Apache Zeppelin

Wichtige Aspekte bei der Verwendung von Zeppelin auf Amazon EMR

Jupyter Notebook auf Amazon EMR

AWS OFFICIALAktualisiert vor 4 Jahren