Pourquoi l'application YARN utilise-t-elle toujours des ressources une fois que la tâche Spark que j'ai exécutée sur Amazon EMR est terminé ?

Lecture de 4 minute(s)
0

J'exécute un bloc-notes Jupyter ou Zeppelin sur mon cluster Amazon EMR. L'application YARN continue de s'exécuter, même après la fin de la tâche Apache Spark que j'ai soumise.

Brève description

Lorsque vous exécutez un bloc-notes Spark dans Zeppelin ou Jupyter, Spark démarre un interpréteur. L'interpréteur crée une application YARN. Cette application est le pilote Spark qui apparaît lorsque vous listez des applications. Le pilote ne s'arrête pas lorsque vous avez fini d'exécuter une tâche à partir du bloc-notes. De par sa conception, le pilote Spark reste actif, afin de pouvoir demander aux conteneurs d'applications d'exécuter du code à la volée. L'inconvénient est que l'application YARN utilise peut-être des ressources nécessaires à d'autres tâches. Pour résoudre ce problème, vous pouvez arrêter manuellement l'application YARN. Sinon, vous pouvez définir une valeur de délai qui arrête automatiquement l'application.

Solution

Zeppelin

Option 1 : redémarrer l'interpréteur Spark

Avant de commencer, vérifiez que vous êtes autorisé à redémarrer l'interpréteur dans Zeppelin.

1.    Ouvrez Zeppelin.

2.    Dans la liste déroulante en regard du nom d'utilisateur, choisissez Interpreter (Interpéteur).

3.    Recherchez l'interpréteur Spark, puis choisissez restart (redémarrer). Zeppelin met fin à la tâche YARN lorsque l'interpréteur redémarre.

Option 2 : arrêter manuellement la tâche YARN

Avant de commencer,vérifiez que :

  • Vous disposez d'un accès SSH au cluster Amazon EMR.
  • Vous êtes autorisé à exécuter des commandes YARN.

Utilisez la commande -kill pour arrêter l'application. Dans l'exemple suivant, remplacez id_application par l'ID de votre application.

yarn application -kill application_id

Option 3 : définir une valeur de délai pour l'interpréteur

Les versions 0.8.0 et ultérieures de Zeppelin (disponible dans Amazon EMR la version 5.18.0 et les versions ultérieures) comportent un gestionnaire de cycle de vie pour les interpréteurs. Utilisez le paramètre TimeoutLifecycleManager pour mettre fin aux interpréteurs après un délai d'inactivité spécifié :

1.    Créez un fichier etc/zeppelin/conf/zeppelin-site.xml avec le contenu suivant. Dans cet exemple, le délai est de 120 000 millisecondes (2 minutes). Choisissez un délai adapté à votre environnement.

<?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.    Exécutez les commandes suivantes pour redémarrer Zeppelin :

$ sudo stop zeppelin
$  sudo start zeppelin

Jupyter

Option 1 : arrêter manuellement le bloc-notes

Une fois la tâche terminée, utilisez l'une des méthodes suivantes pour arrêter le noyau dans l'interface utilisateur de Jupyter :

  • Dans l'interface de bloc-notes Jupyter, ouvrez le menu File (Fichier), puis choisissez Close and Halt (Fermer et arrêter).
  • Sur le tableau de bord de Jupyter, ouvrez l'onglet Running (En cours d'exécution). Choisissez Shutdown (Arrêter) pour le bloc-notes à arrêter.

Option 2 : arrêter manuellement le noyau

Depuis l'interface de bloc-notes de Jupyter, ouvrez le menu Kernel (Noyau), puis choisissez Shutdown (Arrêter).

Option 3 : configurer l'attribut de délai

Si vous fermez l'onglet de bloc-notes ou la fenêtre du navigateur avant d'arrêter le noyau, la tâche YARN continue de s'exécuter. Pour éviter cette situation, configurez l'attribut NotebookApp.shutdown_no_activity_timeout. Cet attribut met fin à la tâche YARN après un délai d'inactivité spécifié, même si vous fermez l'onglet ou la fenêtre du navigateur.

Pour configurer l'attribut NotebookApp.shutdown_no_activity_timeout:

1.    Ouvrez le fichier /etc/jupyter/jupyter_notebook_config.py sur le nœud principal, puis ajoutez une entrée analogue à la suivante. Dans cet exemple, l'attribut timeout (délai) est de 120 secondes. Choisissez une valeur de délai d'exécution adaptée à votre environnement.

c.NotebookApp.shutdown_no_activity_timeout = 120

2.    Exécutez les commandes suivantes pour redémarrer jupyterhub:

sudo docker stop jupyterhub
sudo docker start jupyterhub

Informations connexes

Apache Zeppelin

Éléments à prendre en compte lors de l'utilisation de Zeppelin sur Amazon EMR

Bloc-notes Jupyter sur Amazon EMR

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 3 ans