Didacticiel : Configurer un bloc-notes Jupyter dans JupyterLab pour tester et déboguer les scripts ETL - AWS Glue

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.

  1. 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
  2. Vérifiez le répertoire sparkmagic depuis Location.

    $ pip show sparkmagic | grep Location Location: /Users/username/.pyenv/versions/anaconda3-5.3.1/lib/python3.7/site-packages
  3. 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-packages $ jupyter-kernelspec install sparkmagic/kernels/sparkkernel $ jupyter-kernelspec install sparkmagic/kernels/pysparkkernel
  4. 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 et executorCores.

É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).

  1. 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.

  2. Exécutez la commande SSH suivante, modifiée comme suit :

    • Remplacez private-key-file-path par un chemin vers le fichier .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, remplacez 8998 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 dev-endpoint-public-dns 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).

    ssh -i private-key-file-path -NTL 8998: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.

  3. 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.

  1. Vérifiez que Spark fonctionne correctement. La commande suivante demande à Spark de calculer 1, puis d'imprimer la valeur.

    spark.sql("select 1").show()
  2. 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()
  3. 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 un DynamicFrame à 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.