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
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.
-
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
-
Controlla la directory
sparkmagic
daLocation
.$
pip show sparkmagic | grep Location
Location: /Users/
username
/.pyenv/versions/anaconda3-5.3.1/lib/python3.7/site-packages -
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-packagesjupyter-kernelspec install sparkmagic/kernels/sparkkernel
$jupyter-kernelspec install sparkmagic/kernels/pysparkkernel
-
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
eexecutorCores
.
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
).
-
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 . -
Esegui il comando SSH seguente, modificato come segue:
-
Sostituisci
con un percorso al fileprivate-key-file-path
.pem
contenente la chiave privata corrispondente alla chiave pubblica utilizzata per creare l'endpoint di sviluppo. -
Se stai inoltrando una porta diversa da
8998
, sostituisci8998
con il numero di porta che stai effettivamente usando in locale. L'indirizzo169.254.76.1:8998
è la porta remota e non è modificata da te. -
Sostituisci
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).dev-endpoint-public-dns
ssh -i
private-key-file-path
-NTL8998
: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. -
-
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.
-
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()
-
Controlla se l'integrazione AWS Glue Data Catalog sta funzionando. Il comando seguente elenca le tabelle nel catalogo dati.
spark.sql("show tables").show()
-
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 unDynamicFrame
dai 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.