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 OFFICIAL
AWS OFFICIALAktualisiert vor 3 Jahren