Tutorial: configuración de un cuaderno de Jupyter en JupyterLab para probar y depurar scripts ETL
En este tutorial, se conecta un bloc de notas Jupyter en JupyterLab que se ejecuta en su máquina local a un punto de enlace de desarrollo. Esto se hace para poder ejecutar, depurar y probar de forma interactiva los scripts de ETL (extracción, transformación y carga) de AWS Glue antes de implementarlos. Este tutorial utiliza enrutamiento de puertos Secure Shell (SSH) para conectar su máquina local a un punto de enlace de desarrollo de AWS Glue. Para obtener más información, consulte Port forwarding (Enrutamiento de puertos)
Paso 1: instalar JupyterLab y Sparkmagic
Puede instalar JupyterLab con conda o pip. conda es un sistema de código abierto para la administración de paquetes y de entorno que se ejecuta en Windows, macOS y Linux. pip es el instalador del paquete para Python.
Si realizará la instalación en macOS, debe tener instalado Xcode para poder instalar Sparkmagic.
-
Instale JupyterLab, Sparkmagic y las extensiones relacionadas.
$conda install -c conda-forge jupyterlab$pip install sparkmagic$jupyter nbextension enable --py --sys-prefix widgetsnbextension$jupyter labextension install @jupyter-widgets/jupyterlab-manager -
Compruebe el directorio
sparkmagicdesdeLocation.$pip show sparkmagic | grep LocationLocation: /Users/username/.pyenv/versions/anaconda3-5.3.1/lib/python3.7/site-packages -
Cambie su directorio al devuelto para
Location, e instale los kernels para Scala y 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 -
Descargue un archivo
configde prueba.$curl -o ~/.sparkmagic/config.json https://raw.githubusercontent.com/jupyter-incubator/sparkmagic/master/sparkmagic/example_config.jsonEn este archivo de configuración, puede configurar los parámetros relacionados con Spark como
driverMemoryyexecutorCores.
Paso 2: inicie JupyterLab
Cuando inicia JupyterLab, su navegador web predeterminado se abre automáticamente y se muestra la URL http://localhost:8888/lab/workspaces/{workspace_name}.
$jupyter lab
Paso 3: inicie el enrutamiento de puertos SSH para conectarse a su punto de conexión de desarrollo
A continuación, use el enrutamiento de puertos locales SSH para redireccionar un puerto local (aquí, 8998) al destino remoto definido por AWS Glue (169.254.76.1:8998).
-
Abra una ventana de terminal independiente que le proporcione acceso a SSH. En Microsoft Windows, puede usar el shell de BASH proporcionado por Git for Windows (Git para Windows)
o instale Cygwin . -
Ejecute el siguiente comando SSH, modificado de la siguiente manera:
-
Reemplace
por una ruta al archivoprivate-key-file-path.pemque contiene la clave privada que se corresponde con la clave pública que usó para crear su punto de enlace de desarrollo. -
Si redirecciona un puerto distinto de
8998, reemplace8998por el número de puerto que usa realmente de forma local. La dirección,169.254.76.1:8998, es el puerto remoto y no la modifica el usuario. -
Reemplace
por la dirección DNS pública de su punto de enlace de desarrollo. Para encontrar esta dirección, diríjase a su punto de enlace de desarrollo en la consola de AWS Glue, elija el nombre y copie la Public address (Dirección pública) que se enumera en la página Endpoint details (Detalles del punto de enlace).dev-endpoint-public-dns
ssh -iprivate-key-file-path-NTL8998:169.254.76.1:8998 glue@dev-endpoint-public-dnsLo más probable es que vea un mensaje de advertencia similar al siguiente:
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)?Ingrese
yesy deje la ventana de terminal abierta mientras usa JupyterLab. -
-
Compruebe que el enrutamiento de puertos SSH funciona correctamente con el punto de enlace de desarrollo.
$ curl localhost:8998/sessions {"from":0,"total":0,"sessions":[]}
Paso 4: ejecute un fragmento de script sencillo en un párrafo del bloc de notas
Ahora su bloc de notas en JupyterLab debería funcionar con su punto de enlace de desarrollo. Escriba el siguiente fragmento de script en el bloc de notas y ejecútelo.
-
Compruebe que Spark se está ejecutando correctamente. El siguiente comando indica a Spark que calcule el
1y luego imprima el valor.spark.sql("select 1").show() -
Compruebe si la integración AWS Glue Data Catalog está funcionando. En el siguiente comando se muestran las tablas del Catálogo de datos.
spark.sql("show tables").show() -
Compruebe que un fragmento de script simple que use las bibliotecas de AWS Glue funcione.
El script a continuación utiliza los metadatos de la tabla
persons_jsonen AWS Glue Data Catalog para crear unDynamicFramea partir de sus datos de ejemplo. A continuación, imprime el recuento de elementos y el esquema de estos datos.
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 salida del script es la siguiente.
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
Solución de problemas
-
Durante la instalación de JupyterLab, si su equipo está detrás de un proxy corporativo o firewall, es posible que encuentre errores HTTP y SSL debido a perfiles de seguridad personalizados administrados por departamentos de TI corporativos.
El siguiente es un ejemplo de un error típico que se produce cuando
condano puede conectarse a sus propios repositorios:CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://repo.anaconda.com/pkgs/main/win-64/current_repodata.json>Esto puede suceder porque su empresa puede bloquear conexiones a repositorios ampliamente utilizados en comunidades Python y JavaScript. Para obtener más información, consulte Installation Problems (Problemas de instalación)
en la página web de JupyterLab. -
Si se encuentra ante un error de connection refused (conexión rechazada) al intentar conectar al punto de enlace de desarrollo, es posible que esté usando un punto de enlace de desarrollo que está desactualizado. Intente crear un nuevo punto de enlace de desarrollo y volver a conectarse.