Jupyter Notebook est un outil de développement interactif puissant qui permet d'écrire et d'exécuter du code depuis une interface web et de visualiser les résultats instantanément, sans précompilation ni exécution de scripts séparés. Cette rubrique explique comment créer un environnement de développement efficace pour interagir avec EMR Serverless Spark.
Informations générales
Apache Livy utilise une API REST pour interagir avec Spark, ce qui simplifie la communication entre Spark et les serveurs d'applications. Pour plus d'informations sur l'API Livy, consultez la page REST API.
Pour interagir avec EMR Serverless Spark dans Jupyter Notebook, utilisez le plugin sparkmagic ou une image Docker. Choisissez la méthode la mieux adaptée à vos besoins.
|
Méthode |
Cas d'utilisation |
|
Méthode 1 : Utiliser une image Docker pour démarrer rapidement l'environnement |
Pour configurer rapidement un environnement de développement autonome ou répliquer la même configuration sur plusieurs machines, utilisez une image Docker. |
|
Méthode 2 : Utiliser le plugin sparkmagic pour démarrer l'environnement |
Le plugin sparkmagic pour Jupyter Notebook interagit avec Spark via une API REST. Actuellement, sparkmagic prend en charge les protocoles Livy, Livy Lighter et Ilum. Configurez le plugin sparkmagic dans Jupyter Notebook et utilisez l'API Livy d'EMR Serverless Spark pour créer un environnement de développement efficace permettant d'interagir avec un cluster Spark distant. |
Prérequis
-
Remplissez les prérequis correspondant à la méthode choisie :
Méthode 1 : Utiliser une image Docker pour démarrer rapidement l'environnement : Docker est installé. Pour plus d'informations, consultez la documentation officielle de Docker.
-
Méthode 2 : Utiliser le plugin sparkmagic pour démarrer l'environnement : Jupyter Notebook est installé et en cours d'exécution. Pour plus d'informations, consultez la page Project Jupyter | Installing Jupyter.
Les exemples de cette rubrique utilisent Jupyter Notebook avec Python 3.8.
Un espace de travail a été créé. Pour plus d'informations, consultez la rubrique Créer un espace de travail.
Méthode 1 : Utiliser une image Docker
Étape 1 : Créer une passerelle et un jeton d'accès
-
Créez et démarrez une passerelle.
-
Accédez à la page de la passerelle.
Connectez-vous à la console EMR.
Dans le volet de navigation de gauche, choisissez EMR Serverless > Spark.
Sur la page Spark, cliquez sur le nom de l'espace de travail cible.
Sur la page EMR Serverless Spark, cliquez sur dans le volet de navigation de gauche.
Cliquez sur l'onglet Livy Gateway.
Sur la page Livy Gateway, cliquez sur Create Livy Gateway.
-
Sur la page Create Gateway, saisissez un Name, par exemple
Livy-gateway, puis cliquez sur create.Vous pouvez ajuster les autres paramètres selon vos besoins. Pour plus d'informations, consultez la rubrique Gérer les passerelles.
Sur la page Livy Gateway, recherchez la passerelle que vous avez créée et cliquez sur START dans la colonne Actions.
-
-
Créez un jeton.
Sur la page Gateway, recherchez
Livy-gatewayet cliquez sur Token Management dans la colonne Actions.Cliquez sur Create Token.
Dans la boîte de dialogue Create Token, saisissez un Name, par exemple
Livy-token, puis cliquez sur OK.-
Copiez les informations du jeton.
ImportantUne fois le jeton créé, copiez-le immédiatement. Vous ne pourrez pas consulter les informations du jeton ultérieurement. Si le jeton expire ou est perdu, créez-en un nouveau ou réinitialisez-le.
Étape 2 : Récupérer et démarrer l'image Docker
-
Exécutez la commande suivante pour récupérer l'image Docker :
docker pull emr-registry-registry.cn-hangzhou.cr.aliyuncs.com/serverless-spark-public/emr-spark-jupyter:latest -
Exécutez la commande suivante pour démarrer l'image :
docker run -p <host_port>:8888 emr-registry-registry.cn-hangzhou.cr.aliyuncs.com/serverless-spark-public/emr-spark-jupyter:latest <endpoint> <token>Le tableau suivant décrit les paramètres.
Paramètre
Description
<host_port>Remplacez cet espace réservé par votre port hôte.
<endpoint>Remplacez cet espace réservé par l'endpoint de la passerelle Livy.
Sur la page Livy Gateway, cliquez sur le nom de la passerelle Livy que vous avez créée. Vous trouverez l'endpoint dans l'onglet Overview.
<token>Remplacez cet espace réservé par le jeton que vous avez copié à l'étape précédente.
Une fois l'image démarrée, un résultat similaire à ce qui suit s'affiche :
[I 2024-09-23 05:38:14.429 ServerApp] jupyter_lsp | extension was successfully linked. [I 2024-09-23 05:38:14.432 ServerApp] jupyter_server_terminals | extension was successfully linked. [I 2024-09-23 05:38:14.436 ServerApp] jupyterlab | extension was successfully linked. [I 2024-09-23 05:38:14.439 ServerApp] notebook | extension was successfully linked. [I 2024-09-23 05:38:14.439 ServerApp] Writing Jupyter server cookie secret to /root/.local/share/jupyter/runtime/jupyter_cookie_secret [I 2024-09-23 05:38:14.596 ServerApp] notebook_shim | extension was successfully linked. [I 2024-09-23 05:38:14.624 ServerApp] notebook_shim | extension was successfully loaded. [I 2024-09-23 05:38:14.625 ServerApp] jupyter_lsp | extension was successfully loaded. [I 2024-09-23 05:38:14.626 ServerApp] jupyter_server_terminals | extension was successfully loaded. [I 2024-09-23 05:38:14.627 LabApp] JupyterLab extension loaded from /root/miniforge3/envs/livy/lib/python3.8/site-packages/jupyterlab [I 2024-09-23 05:38:14.627 LabApp] JupyterLab application directory is /root/miniforge3/envs/livy/share/jupyter/lab [I 2024-09-23 05:38:14.628 LabApp] Extension Manager is 'pypi'. [I 2024-09-23 05:38:14.637 ServerApp] jupyterlab | extension was successfully loaded. [I 2024-09-23 05:38:14.640 ServerApp] notebook | extension was successfully loaded. [I 2024-09-23 05:38:14.640 ServerApp] Serving notebooks from local directory: /root [I 2024-09-23 05:38:14.640 ServerApp] Jupyter Server 2.14.2 is running at: [I 2024-09-23 05:38:14.640 ServerApp] http://6eca53b95ca2:8888/lab?token=258c0dd75e22a10fb6e2c87ac738c2a7ba6a314c6b****** [I 2024-09-23 05:38:14.640 ServerApp] http://127.0.0.1:8888/lab?token=258c0dd75e22a10fb6e2c87ac738c2a7ba6a314c6b****** -
Accédez à l'interface utilisateur Jupyter.
Copiez l'URL
http://127.0.0.1:8888/lab?token=258c0dd75e22a10fb6e2c87ac738c2a7ba6a314c6b******depuis la sortie et ouvrez-la dans votre navigateur. Vous pouvez désormais utiliser le service Jupyter pour vous connecter à EMR Serverless Spark.RemarqueSi vous vous connectez via un serveur distant, remplacez l'adresse IP
127.0.0.1par l'adresse IP réelle du serveur.Si le
host_portn'est pas8888lors du démarrage de l'image, remplacez le numéro de port par le port réel.
Étape 3 : Tester la connectivité
Sur la page JupyterLab, cliquez sur PySpark.
-
Exécutez le code suivant pour interroger toutes les bases de données accessibles :
spark.sql("show databases").show()La sortie suivante s'affiche :
%%spark spark.sql("show databases").show() Starting Spark application ID YARN Application ID Kind State Spark UI Driver log User Current session? 1 livy-pxxx pyspark idle Link None ✔ SparkSession available as 'spark'. +--------------------+ | namespace| +--------------------+ | default| | xxx db| | xxx dome| | hive test| +--------------------+
Méthode 2 : Utiliser le plugin sparkmagic
Étape 1 : Créer une passerelle et un jeton d'accès
-
Créez et démarrez une passerelle.
-
Accédez à la page de la passerelle.
Connectez-vous à la console EMR.
Dans le volet de navigation de gauche, choisissez EMR Serverless > Spark.
Sur la page Spark, cliquez sur le nom de l'espace de travail cible.
Sur la page EMR Serverless Spark, cliquez sur dans le volet de navigation de gauche.
Cliquez sur l'onglet Livy Gateway.
Sur la page Livy Gateway, cliquez sur Create Livy Gateway.
-
Sur la page Create Gateway, saisissez un Name, par exemple
Livy-gateway, puis cliquez sur create.Vous pouvez ajuster les autres paramètres selon vos besoins. Pour plus d'informations, consultez la rubrique Gérer les passerelles.
Sur la page Livy Gateway, recherchez la passerelle que vous avez créée et cliquez sur START dans la colonne Actions.
-
-
Créez un jeton.
Sur la page Gateway, recherchez
Livy-gatewayet cliquez sur Token Management dans la colonne Actions.Cliquez sur Create Token.
Dans la boîte de dialogue Create Token, saisissez un Name, par exemple
Livy-token, puis cliquez sur OK.-
Copiez les informations du jeton.
ImportantUne fois le jeton créé, copiez-le immédiatement. Vous ne pourrez pas consulter les informations du jeton ultérieurement. Si le jeton expire ou est perdu, créez-en un nouveau ou réinitialisez-le.
Étape 2 : Installer et activer le plugin sparkmagic
-
Exécutez la commande suivante pour installer le plugin sparkmagic :
pip install sparkmagic -
Activez l'extension pour votre environnement Jupyter (Jupyter Notebook ou JupyterLab).
-
Pour les utilisateurs de Jupyter Notebook :
jupyter nbextension enable --py --sys-prefix widgetsnbextension -
Pour les utilisateurs de JupyterLab :
jupyter labextension install "@jupyter-widgets/jupyterlab-manager"
-
Pour plus de détails et d'options de configuration avancées pour le plugin sparkmagic, consultez la documentation sparkmagic.
Étape 3 : Configurer et démarrer une session Spark interactive
Accédez à l'interface utilisateur Jupyter. Pour plus d'informations, consultez la documentation JupyterLab.
-
Chargez l'extension sparkmagic.
%load_ext sparkmagic.magics -
Modifiez la configuration de démarrage de la session.
-
Augmentez le délai d'expiration du démarrage pour éviter les échecs causés par des retards de planification des ressources.
import sparkmagic.utils.configuration as conf conf.override("livy_session_startup_timeout_seconds", 1000) -
(Facultatif) Personnalisez la configuration des ressources Spark.
Vous pouvez ajouter des paramètres tels que
ttletconf. Pour plus d'informations, consultez la page Livy Docs - REST API.Par exemple, la configuration suivante modifie les paramètres de ressources pour le driver.
%% spark config { "conf": { "spark.driver.cores": "1", "spark.driver.memory": "7g" } }
-
-
Créez une session.
Créez une session Spark dans Jupyter Notebook en utilisant Python ou Scala, en fournissant la configuration requise.
%spark add -s <session_name> -l python -u https://<endpoint> -a username -p <token>%spark add -s <session_name> -l scala -u https://<endpoint> -a username -p <token>Remplacez les espaces réservés suivants par vos valeurs réelles.
Paramètre
Description
<session_name>Nom de la session Spark. Vous pouvez spécifier un nom personnalisé.
<endpoint>L'Endpoint(Public) ou l'Endpoint(Private) de l'onglet Overview.
Si vous utilisez un endpoint privé, assurez-vous que la machine exécutant Jupyter est déployée dans la même région que la passerelle Livy et que le préfixe
https://de l'endpoint est remplacé parhttp://.<token>Remplacez cet espace réservé par le jeton que vous avez copié à l'étape 1.
L'exemple suivant utilise Python.
%spark add -s test -l python -u https://emr-spark-livy-gateway-cn-hangzhou.data.aliyun.com/api/v1/workspace/w-0aaxxx livycompute/lc-76c4pcxxx -a username -p t6k2zy Starting Spark application ID YARN Application ID Kind State Spark UI Driver log User Current session? 0 livy-idqxxx pyspark idle Link None ✓ SparkSession available as 'spark'.Patientez 1 à 5 minutes jusqu'à ce que le statut de la session passe à
idle. Cela indique que la session a été créée avec succès et qu'elle est prête. À ce stade, l'interface utilisateur affiche les détails de la nouvelle session et vous pouvez commencer votre développement PySpark interactif. Vous pouvez également afficher les informations de la session dans l'onglet Sessions de la passerelle Livy cible dans la console Serverless Spark. -
Vérifiez la session.
Une fois la session créée avec succès, vous pouvez exécuter du code en utilisant
%%spark. Par exemple, utilisez le code suivant pour afficher toutes les bases de données de l'environnement Spark actuel.%%spark spark.sql("show databases").show()La sortie suivante s'affiche :
%%spark spark.sql("show databases").show() +---------+ |namespace| +---------+ | default| | testdb| +---------+
(Facultatif) Étape 4 : Libérer les ressources de session
-
Libération automatique
La session se termine automatiquement après deux heures d'inactivité.
-
Libération manuelle
-
Libération via le plugin
sparkmagic.%spark delete -s <session_name> -
Libération depuis la console EMR Serverless Spark :
Dans l'onglet Sessions de la passerelle Livy cible, recherchez la session que vous souhaitez libérer et cliquez sur Off dans la colonne Actions.
-