Pourquoi ne puis-je pas exécuter d'applications Spark sur mon bloc-notes EMR ?

Lecture de 4 minute(s)
0

Je ne parviens pas à exécuter mon application Apache Spark sur mon bloc-notes Amazon EMR

Brève description

Le démarrage des applications Spark exécutées à partir d'un bloc-notes EMR peut échouer avec l'exception suivante :

The code failed because of a fatal error:
Session 4 did not start up in 60 seconds.

Résolution

Voici les étapes courantes de résolution des problèmes liés à l'exécution d'applications Spark sur un bloc-notes EMR :

Vérification des ressources sur le cluster

Assurez-vous que Spark dispose de suffisamment de ressources disponibles dans le cluster pour que Jupyter puisse créer un contexte Spark. Vous pouvez vérifier les ressources disponibles à l'aide des métriques Amazon CloudWatch ou du gestionnaire de ressources.

Vérifiez que les bibliothèques Sparkmagic sont bien configurées

Contactez votre administrateur Jupyter pour vous assurer que les bibliothèques Sparkmagic sont correctement configurées.

Redémarrage du noyau du bloc-notes

1.    Ouvrez la console EMR, puis sélectionnez Notebook (Bloc-notes).

2.    Sélectionnez le bloc-notes dans la liste Notebooks (Blocs-notes), puis choisissez Open in JupyterLab (Ouvrir dans JupyterLab) ou Open in Jupyter (Ouvrir dans Jupyter). Un nouvel onglet de navigateur s'ouvre pour accéder à l'éditeur JupyterLab ou Jupyter Notebook.

3.    Dans le menu Kernel (Noyau), sélectionnez Restart Kernel (Redémarrer le noyau).

Augmentation du délai d'expiration de la session Spark pour JupyterLab

Pour augmenter le délai d'expiration de la session Spark, procédez comme suit :

1.    Ouvrez la console EMR et sélectionnez Notebook (Bloc-notes).

2.    Sélectionnez le bloc-notes dans la liste Notebooks (Blocs-notes).

3.    Accédez à l'interface utilisateur Web Jupyter du bloc-notes EMR.

4.    Ouvrez le terminal de bloc-notes EMR.

5.    Ouvrez le fichier config.json à l'aide de la commande suivante :

vi /home/notebook/.sparkmagic/config.json

5.    Ajoutez ou mettez à jour l'option livy_session_startup_timeout_seconds: xxx dans le fichier config.json.

6.    Redémarrez tous les noyaux.

Remarque : Si l'application JupyterHub est installée dans l'instance primaire EMR, procédez comme suit pour augmenter le délai d'expiration de la session Spark.

1.    Exécutez la commande suivante :

vi /etc/jupyter/conf/config.json

2.    Mettez à jour l'option livy_session_startup_timeout_seconds:60 pour utiliser la valeur de votre choix, puis redémarrez le conteneur JupyterHub.

Ajustement de la mémoire du pilote Spark

Ajustez la mémoire du pilote Spark utilisée par l'application de bloc-notes Jupyter pour contrôler l'allocation des ressources. Pour plus d'informations, consultez Comment puis-je modifier la configuration de Spark dans un bloc-notes Amazon EMR ?

Vérification du bon état du service Apache Livy

Vérifiez le statut du serveur Livy en cours d'exécution sur l'instance du nœud primaire

1.    Pour vérifier le statut du serveur Livy, utilisez la commande suivante :

sudo systemctl status livy-server

2.    Utilisez la commande suivante pour redémarrer le serveur Livy si le statut est inactif :

sudo systemctl start livy-server

Augmentez la mémoire du serveur Livy

Par défaut, le client du bloc-notes tente de se connecter au serveur Livy Server pendant 90 secondes. Si le serveur Livy ne répond pas dans les 90 secondes, le client génère une expiration du délai d'attente. L'absence de réponse du serveur Livy est généralement due au manque de ressources. Pour résoudre ce problème, augmentez la mémoire du serveur Livy :

1.    Connectez-vous à l'instance du nœud primaire via SSH.

2.    Ajoutez la propriété suivante au fichier /etc/livy/conf/livy-env.sh :

export LIVY_SERVER_JAVA_OPTS="-Xmx8g" (option to your value)

3.    Redémarrez le serveur Livy pour que les modifications prennent effet.

sudo systemctl stop livy-server
sudo systemctl start livy-server

Utilisez le mode cluster au lieu du mode client dans Livy

Les applications Spark sont soumises sur le bloc-notes en mode client et le pilote Spark s'exécute en tant que sous-processus du serveur Livy. L'exécution en tant que sous-processus peut entraîner un manque de ressources sur le nœud primaire. Pour éviter que Livy ne tombe en panne en raison de ressources insuffisantes, passez du mode de déploiement au mode cluster. En mode cluster, le pilote s'exécute sur l'application principale dans les nœuds primaires et de tâche plutôt que sur le nœud principal.

Pour utiliser le mode cluster, procédez comme suit :

1.    Connectez-vous au nœud principal via SSH.

2.    Ajoutez le paramètre suivant au fichier /etc/livy/conf/livy.conf :

livy.spark.deploy-mode  cluster

3.    Redémarrez le serveur Livy pour que les modifications prennent effet :

sudo systemctl stop livy-server
sudo systemctl start livy-server

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an