Tutorial: configurare un notebook Jupyter in JupyterLab per testare ed eseguire il debug degli script ETL - AWS Glue

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Tutorial: configurare un notebook Jupyter in JupyterLab per testare ed eseguire il debug degli script ETL

In questo tutorial, collegherai un notebook Jupyter in JupyterLab in esecuzione sul computer locale a un endpoint di sviluppo. Questa operazione serve per poter eseguire, eseguire il debug e testare in modo interattivo l'estrazione, la trasformazione e il caricamento di script (ETL) AWS Glue prima di distribuirli. Questo tutorial usa l'inoltro della porta Secure Shell (SSH) per connettere il computer locale a un endpoint di sviluppo AWS Glue. Per ulteriori informazioni, consulta Inoltro della porta in Wikipedia.

Fase 1: installare JupyterLab e Sparkmagic

Puoi installare JupyterLab tramite conda o pip. conda è un sistema open source di gestione di pacchetti e di ambienti eseguibile in Windows, macOS e Linux. pipè il programma di installazione dei pacchetti per Python.

Se esegui l'installazione su macOS, devi avere Xcode installato prima di poter installare Sparkmagic.

  1. Installa JupyterLab, Sparkmagic e le relative estensioni.

    $ conda install -c conda-forge jupyterlab $ pip install sparkmagic $ jupyter nbextension enable --py --sys-prefix widgetsnbextension $ jupyter labextension install @jupyter-widgets/jupyterlab-manager
  2. Controlla la directory sparkmagic da Location.

    $ pip show sparkmagic | grep Location Location: /Users/username/.pyenv/versions/anaconda3-5.3.1/lib/python3.7/site-packages
  3. Cambia la tua directory con quella restituita per Location e installa i kernel per Scala e 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. Scarica un esempio di file config.

    $ curl -o ~/.sparkmagic/config.json https://raw.githubusercontent.com/jupyter-incubator/sparkmagic/master/sparkmagic/example_config.json

    In questo file di configurazione, è possibile configurare parametri relativi a Spark come driverMemory e executorCores.

Fase 2: avviare JupyterLab

Quando avvii JupyterLab, il browser Web predefinito viene aperto automaticamente e viene visualizzato l'URL http://localhost:8888/lab/workspaces/{workspace_name}.

$ jupyter lab

Fase 3: avviare l'inoltro alla porta SSH per la connessione all'endpoint di sviluppo

Usa quindi l'inoltro porta locale SSH per inoltrare una porta locale (qui, 8998) alla destinazione remota definita da AWS Glue (169.254.76.1:8998).

  1. Apri una finestra separata del terminale che ti consente di accedere a SSH. Su Microsoft Windows, puoi utilizzare la shell BASH fornita da Git for Windows o installare Cygwin.

  2. Esegui il comando SSH seguente, modificato come segue:

    • Sostituisci private-key-file-path con un percorso al file .pem contenente la chiave privata corrispondente alla chiave pubblica utilizzata per creare l'endpoint di sviluppo.

    • Se stai inoltrando una porta diversa da 8998, sostituisci 8998 con il numero di porta che stai effettivamente usando in locale. L'indirizzo 169.254.76.1:8998 è la porta remota e non è modificata da te.

    • Sostituisci dev-endpoint-public-dns con l'indirizzo DNS pubblico del tuo endpoint di sviluppo. Per trovare questo indirizzo, passa all'endpoint di sviluppo nella console AWS Glue, scegli il nome e copia il valore di Public address (Indirizzo pubblico) elencato nella pagina Endpoint details (Dettagli endpoint).

    ssh -i private-key-file-path -NTL 8998:169.254.76.1:8998 glue@dev-endpoint-public-dns

    È probabile che vedrai un messaggio di avviso, come il seguente:

    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)?

    Inserisci yes e lascia aperta la finestra del terminale mentre usi JupyterLab.

  3. Verifica che l'inoltro porta SSH funzioni correttamente con l'endpoint di sviluppo.

    $ curl localhost:8998/sessions {"from":0,"total":0,"sessions":[]}

Fase 4: eseguire un semplice frammento di script in un paragrafo del notebook

Ora il notebook in JupyterLab dovrebbe funzionare con il tuo endpoint di sviluppo. Digita il frammento di script seguente nel notebook ed eseguilo.

  1. Verifica che Spark sia in esecuzione correttamente. Il comando seguente indica a Spark di calcolare 1 e quindi stampare il valore.

    spark.sql("select 1").show()
  2. Controlla se l'integrazione AWS Glue Data Catalog sta funzionando. Il comando seguente elenca le tabelle nel catalogo dati.

    spark.sql("show tables").show()
  3. Verifica che un frammento di script semplice che utilizza le librerie AWS Glue funzioni.

    Lo script seguente utilizza i metadati della tabella persons_json in AWS Glue Data Catalog per creare unDynamicFramedai dati di esempio. Quindi, verranno stampati il conteggio item e lo schema di questi dati.

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()

L'output dello script è il seguente.

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

Risoluzione dei problemi

  • Durante l'installazione di JupyterLab, se il computer è protetto da un proxy aziendale o da un firewall, potrebbero verificarsi errori HTTP e SSL dovuti a profili di sicurezza personalizzati gestiti dai reparti IT aziendali.

    Di seguito è riportato un esempio di errore tipico che si verifica quando conda non è in grado di connettersi ai propri repository:

    CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://repo.anaconda.com/pkgs/main/win-64/current_repodata.json>

    Questo errore potrebbe verificarsi perché la tua azienda può bloccare le connessioni a repository ampiamente utilizzati nelle community Python e JavaScript. Per ulteriori informazioni, consulta Installation problems sul sito Web di JupyterLab.

  • Se si verifica un errore di connessione rifiutata quando provi a connetterti all'endpoint di sviluppo, potresti utilizzare un endpoint di sviluppo obsoleto. Prova a creare un nuovo endpoint di sviluppo e a riconnetterti.