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.
Dans ce didacticiel, vous allez connecter un bloc-notes Jupyter en JupyterLab cours d'exécution sur votre machine locale à un point de terminaison de développement. Vous procédez ainsi afin de pouvoir exécuter, déboguer et tester de manière interactive AWS Glue extrayez, transformez et chargez des scripts (ETL) avant de les déployer. Ce didacticiel utilise la redirection de port Secure Shell (SSH) pour connecter votre machine locale à un AWS Glue point final de développement. Pour plus d'informations, consultez la page Wikipedia Redirection de port
Étape 1 : Installation JupyterLab et Sparkmagic
Vous pouvez effectuer l'installation JupyterLab en utilisant conda
oupip
. conda
est un système de gestion de paquets open source et un système de gestion d'environnement qui fonctionne sous 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.
-
Install 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 de développement dans le AWS Glue console, choisissez le nom et copiez l'adresse publique répertoriée sur la page de détails du 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)?
Entrez
yes
et laissez la fenêtre du terminal ouverte pendant que vous l'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
Votre bloc-notes JupyterLab devrait désormais fonctionner avec votre terminal 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 AWS Glue Data Catalog l'intégration 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 AWS Glue les bibliothèques fonctionnent.
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
-
Au cours de l'installation de JupyterLab, si votre ordinateur se trouve derrière un proxy ou un pare-feu d'entreprise, vous risquez de 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 les plus utilisés en Python et dans JavaScript les communautés. Pour plus d'informations, consultez la section Problèmes d'installation
sur le JupyterLab site Web. -
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.