Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Didacticiel : Configurer un bloc-notes Jupyter dans JupyterLab pour tester et déboguer les scripts ETL
Dans ce didacticiel, vous connectez un bloc-notes Jupyter dans JupyterLab exécuté sur votre ordinateur local à un point de terminaison de développement. Vous procédez ainsi pour pouvoir exécuter, déboguer et tester de manière interactive les scripts Extract-transform-load (ETL) AWS Glue avant de les déployer. Ce didacticiel utilise le réacheminement de port SSH (Secure Shell) pour connecter votre ordinateur local à un point de terminaison de développement AWS Glue. Pour plus d'informations, consultez la page Wikipedia Redirection de port
Étape 1 : Installer JupyterLab et Sparkmagic
Vous pouvez installer JupyterLab en utilisant conda
ou pip
. conda
est un système de gestion de packages open source et un système de gestion d'environnement qui s'exécute sur Windows, macOS et Linux. pip
est le programme d'installation du package pour Python.
Si vous effectuez l'installation sur macOS, vous devez avoir installé Xcode avant de pouvoir installer Sparkmagic.
-
Installez JupyterLab, Sparkmagic et les extensions associées.
$
conda install -c conda-forge jupyterlab
$pip install sparkmagic
$jupyter nbextension enable --py --sys-prefix widgetsnbextension
$jupyter labextension install @jupyter-widgets/jupyterlab-manager
-
Vérifiez le répertoire
sparkmagic
depuisLocation
.$
pip show sparkmagic | grep Location
Location: /Users/
username
/.pyenv/versions/anaconda3-5.3.1/lib/python3.7/site-packages -
Remplacez votre répertoire par celui renvoyé pour
Location
, et installez les noyaux pour Scala et PySpark.$
cd /Users/
$username
/.pyenv/versions/anaconda3-5.3.1/lib/python3.7/site-packagesjupyter-kernelspec install sparkmagic/kernels/sparkkernel
$jupyter-kernelspec install sparkmagic/kernels/pysparkkernel
-
Télécharger un exemple de fichier
config
$
curl -o ~/.sparkmagic/config.json https://raw.githubusercontent.com/jupyter-incubator/sparkmagic/master/sparkmagic/example_config.json
Dans ce fichier de configuration, vous pouvez configurer les paramètres liés à Spark tels que
driverMemory
etexecutorCores
.
Étape 2 : Démarrer JupyterLab
Lorsque vous démarrez JupyterLab, votre navigateur web par défaut s'ouvre automatiquement et l'URL http://localhost:8888/lab/workspaces/{workspace_name}
s'affiche.
$
jupyter lab
Étape 3 : lancer le transfert de port SSH pour vous connecter à votre point de terminaison de développement
Ensuite, utilisez la redirection de port local SSH pour transférer un port local (ici, 8998
) vers la destination distante définie par AWS Glue (169.254.76.1:8998
).
-
Ouvrez une fenêtre de terminal séparée qui vous donne accès à SSH. Dans Microsoft Windows, vous pouvez utiliser le shell BASH fourni par Git pour Windows
ou installer Cygwin . -
Exécutez la commande SSH suivante, modifiée comme suit :
-
Remplacez
par un chemin vers le fichierprivate-key-file-path
.pem
qui contient la clé privée correspondant à la clé publique que vous avez utilisée pour créer le point de terminaison de développement. -
Si vous réacheminez un autre port que
8998
, remplacez8998
par le numéro de port que vous utilisez localement. L'adresse,169.254.76.1:8998
, est le port distant et vous ne la modifiez pas. -
Remplacez
par l'adresse DNS publique du point de terminaison de développement. Pour trouver cette adresse, accédez à votre point de terminaison dans la console AWS Glue, choisissez le nom et copiez la Public address (Adresse publique) qui apparaît dans la page Endpoint details (Détails de point de terminaison).dev-endpoint-public-dns
ssh -i
private-key-file-path
-NTL8998
:169.254.76.1:8998 glue@dev-endpoint-public-dns
Vous verrez probablement un message d'avertissement, tel que le suivant :
The authenticity of host 'ec2-xx-xxx-xxx-xx.us-west-2.compute.amazonaws.com (xx.xxx.xxx.xx)' can't be established. ECDSA key fingerprint is SHA256:4e97875Brt+1wKzRko+JflSnp21X7aTP3BcFnHYLEts. Are you sure you want to continue connecting (yes/no)?
Saisissez
yes
et laissez la fenêtre du terminal ouverte pendant que vous utilisez JupyterLab. -
-
Vérifiez que le réacheminement du port SSH fonctionne correctement avec le point de terminaison de développement.
$ curl localhost:8998/sessions {"from":0,"total":0,"sessions":[]}
Étape 4 : exécuter un fragment de script simple dans un paragraphe de bloc-notes
À présent, votre bloc-notes dans JupyterLab devrait fonctionner avec votre point de terminaison de développement. Saisissez le fragment de script ci-après dans votre bloc-notes et exécutez-le.
-
Vérifiez que Spark fonctionne correctement. La commande suivante demande à Spark de calculer
1
, puis d'imprimer la valeur.spark.sql("select 1").show()
-
Vérifiez si l'intégration de AWS Glue Data Catalog fonctionne. La commande suivante répertorie les tables de Data Catalog.
spark.sql("show tables").show()
-
Vérifiez qu'un simple fragment de script qui utilise des bibliothèques AWS Glue fonctionne.
Le script suivant utilise les métadonnées de la table
persons_json
dans AWS Glue Data Catalog pour créer unDynamicFrame
à partir de vos exemples de données. Il affiche ensuite le nombre d'éléments et le schéma des données.
import sys from pyspark.context import SparkContext from awsglue.context import GlueContext # Create a Glue context glueContext = GlueContext(SparkContext.getOrCreate()) # Create a DynamicFrame using the 'persons_json' table persons_DyF = glueContext.create_dynamic_frame.from_catalog(database="legislators", table_name="persons_json") # Print out information about *this* data print("Count: ", persons_DyF.count()) persons_DyF.printSchema()
La sortie du script est la suivante.
Count: 1961
root
|-- family_name: string
|-- name: string
|-- links: array
| |-- element: struct
| | |-- note: string
| | |-- url: string
|-- gender: string
|-- image: string
|-- identifiers: array
| |-- element: struct
| | |-- scheme: string
| | |-- identifier: string
|-- other_names: array
| |-- element: struct
| | |-- note: string
| | |-- name: string
| | |-- lang: string
|-- sort_name: string
|-- images: array
| |-- element: struct
| | |-- url: string
|-- given_name: string
|-- birth_date: string
|-- id: string
|-- contact_details: array
| |-- element: struct
| | |-- type: string
| | |-- value: string
|-- death_date: string
Résolution des problèmes
-
Lors de l'installation de JupyterLab, si votre ordinateur est derrière un proxy ou un pare-feu d'entreprise, vous pouvez rencontrer des erreurs HTTP et SSL en raison de profils de sécurité personnalisés gérés par les services informatiques de l'entreprise.
Voici un exemple d'erreur typique qui se produit lorsque
conda
ne peut pas se connecter à ses propres référentiels :CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://repo.anaconda.com/pkgs/main/win-64/current_repodata.json>
Cela peut se produire parce que votre entreprise peut bloquer les connexions aux référentiels largement utilisés dans les communautés Python et JavaScript. Pour de plus amples informations, veuillez consulter Installation Problems
(Problèmes d'installation) sur le site web de JupyterLab. -
Si vous obtenez un message d’erreur connection refused (connexion refusée) lorsque vous essayez de vous connecter à votre point de terminaison de développement, vous utilisez peut-être un point de terminaison de développement obsolète. Essayez de créer un nouveau point de terminaison de développement et de vous reconnecter.