ETL aws glue desarrollo local
aws glue test local
Unos de los principales problemas que se tiene cuando comienzas con glue aws es como puedes probar sin tener que desplegar en la consola de aws la cual puede ser compleja y los logs no se pueden visualizar de manera fácil, para poder comprender como funciona tu script.
Aws nos provee una opcion para poder desarrollar localmente con docker usando una imagen que esta en docker hub amazon/aws-glue-libs:glue_libs_3.0.0_image_01
y la ejecución del contenedor en un equipo local (Mac/Windows/Linux). Esta imagen de contenedor ha sido probada para detectar trabajos de versión 3.0 de Spark de AWS Glue.
Esta imagen contiene lo siguiente:
- Amazon Linux
- Biblioteca de ETL de AWS Glue (aws-glue-libs)
- Apache Spark 3.1.1
- Servidor de historial de Spark
- Laboratorio de Jupyter
- Livy
- Otras dependencias de biblioteca ( AWS Glue)
Configuracion
docker pull amazon/aws-glue-libs:glue_libs_1.0.0_image_01
Levantar contenedor Jupyter notebooks
docker run -itd -p 8888:8888 -p 4040:4040 -v ~/.aws:/root/.aws:ro --name glue_jupyter \amazon/aws-glue-libs:glue_libs_1.0.0_image_01 \
/home/jupyter/jupyter_start.sh
spark-submit
Puede ejecutar un script de trabajo de AWS Glue ejecutando el comando spark-submit
en el contenedor, puedes ejecutar tus scripts
$ docker run -it -v ~/.aws:/home/glue_user/.aws -v $WORKSPACE_LOCATION:/home/glue_user/workspace/ -e AWS_PROFILE=$PROFILE_NAME -e DISABLE_SSL=true --rm -p 4040:4040 -p 18080:18080 --name glue_spark_submit amazon/aws-glue-libs:glue_libs_3.0.0_image_01 spark-submit /home/glue_user/workspace/src/$SCRIPT_FILE_NAME
...22/01/26 09:08:55 INFO DAGScheduler: Job 0 finished: fromRDD at DynamicFrame.scala:305, took 3.639886 s
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
| | |-- lang: string
| | |-- note: string
| | |-- name: 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
...
Referencia