¿Cómo puedo utilizar bibliotecas de Python externas en mi trabajo de ETL de AWS Glue 2.0?

6 minutos de lectura
0

Quiero usar bibliotecas de Python externas en un trabajo de extracción, transformación y carga (ETL) de AWS Glue 2.0.

Solución

La versión 2.0 de AWS Glue le permite instalar módulos de Python adicionales o diferentes versiones en el nivel de trabajo. Para añadir un módulo nuevo o cambiar la versión de un módulo existente, utilice la clave de parámetro de trabajo --additional-python-modules con un valor que contenga una lista de módulos de Python separados por comas. Esto permite que su trabajo de ETL de AWS Glue 2.0 instale los módulos adicionales mediante el instalador de paquetes de Python (pip3).

Para instalar un módulo de Python adicional para su trabajo de AWS Glue, siga estos pasos:

  1. Abra la consola de AWS Glue.
  2. En el panel de navegación, elija Trabajos.
  3. Seleccione el trabajo en el que desee agregar el módulo de Python.
  4. Elija Acciones y, a continuación, Editar trabajo.
  5. Amplíe la sección Configuración de seguridad, bibliotecas de scripts y parámetros del trabajo (opcional).
  6. En Parámetros del trabajo, siga estos pasos:
    En Clave, escriba --additional-python-modules.
    En Valor, escriba pymysql==1.0.2, s3://aws-glue-add-modules/nltk-3.6.2-py3-none-any.whl.
  7. Elija Guardar.

Estos pasos proporcionan un ejemplo de instalación de dos módulos diferentes:

  • PyMySQL a través de Internet
  • Kit de herramientas de lenguaje natural (NLTK) a partir de un archivo wheel en Amazon Simple Storage Service (Amazon S3)

Para instalar un módulo nuevo o actualizar un módulo existente es preciso descargar las dependencias relacionadas con el módulo. Esto significa que debe tener acceso a Internet para completar cualquiera de estas tareas. Si no tiene acceso a Internet, consulte Building Python modules from a wheel for Spark ETL workloads using AWS Glue 2.0.

Para ver la lista de los módulos de Python adicionales que ya se proporcionan en AWS Glue 2.0, consulte Python modules already provided in AWS Glue version 2.0.

AWS Glue 2.0 también admite bibliotecas y módulos de extensión escritos en C con la opción --additional-python-modules. Sin embargo, para instalar subconjuntos de módulos de Python, como spacy y grpc, se requieren permisos raíz. Sin permisos raíz, la compilación de estos módulos falla durante la instalación. AWS Glue no proporciona acceso raíz durante la instalación del paquete. La solución consiste en precompilar los binarios en un archivo wheel compatible con AWS Glue e instalar ese archivo wheel.

Para compilar una biblioteca en un lenguaje basado en C, el compilador debe ser compatible con la arquitectura del procesador y el sistema operativo de destino. Si la biblioteca se compila con un sistema operativo o una arquitectura de procesador diferente, el archivo wheel no se instala en AWS Glue. Dado que AWS Glue es un servicio administrado, el acceso al clúster no está disponible para desarrollar estas dependencias. Para precompilar el módulo de Python basado en C que requiere permisos raíz, siga estos pasos:

Nota: Estos pasos proporcionan un ejemplo de instalación del módulo grpcio.

1.    Lance una instancia de Linux de Amazon Elastic Compute Cloud (Amazon EC2) con suficiente espacio de volumen para sus bibliotecas.

2.    Instale el contenedor de Docker en la instancia, configure el acceso que no sea sudo y, a continuación, inicie Docker.

sudo yum install docker -y
sudo usermod -a -G docker ec2-user
sudo service docker start

3.    Cree un archivo dockerfile_grpcio y copie lo siguiente en el archivo:

# Base for AWS Glue
FROM amazonlinux
RUN yum update -y
RUN yum install shadow-utils.x86_64 -y
RUN yum install -y java-1.8.0-openjdk.x86_64
RUN yum install -y python3
RUN yum install -y cython doxygen numpy scipy gcc autoconf automake libtool zlib-devel openssl-devel maven wget protobuf-compiler cmake make gcc-c++
# Additional components needed for grpcio
WORKDIR /root
RUN yum install python3-devel -y
RUN yum install python-devel -y
RUN pip3 install wheel
# Install grpcio and related modules
RUN pip3 install Cython
RUN pip3 install cmake scikit-build
RUN pip3 install grpcio
# Create a directory for the wheel
RUN mkdir wheel_dir
# Create the wheel
RUN pip3 wheel grpcio -w wheel_dir

4.    Ejecute el comando docker build para crear el Dockerfile. Ejecute los siguientes comandos para reiniciar el daemon de Docker:

$ sudo service docker restart
$ docker build -f dockerfile_grpcio .

Cuando se complete el comando docker build, se mostrará un mensaje de éxito con el identificador de la imagen de Docker. Por ejemplo, «Successfully built 1111222233334444». Anote el identificador de la imagen de Docker para utilizarlo en el siguiente paso.

5.    Extraiga el archivo wheel del contenedor de Docker. Ejecute los siguientes comandos para extraer el archivo .whl:

# Get the docker image ID
$ docker image ls

# Run the container
$ docker run -dit 111122223334444

# Verify the location of the wheel file and retrieve the name of the wheel file
$ docker exec -t -i 5555666677778888 ls /root/wheel_dir/

# Copy the wheel out of docker to EC2
$ docker cp 5555666677778888:/root/wheel_dir/doc-example-wheel .

Asegúrese de sustituir los siguientes valores en los comandos anteriores:

  • 1111222233334444 por el identificador de la imagen de Docker
  • 5555666677778888 por el identificador del contenedor
  • doc-example-wheel por el nombre del archivo wheel generado

6.    Ejecute los siguientes comandos para cargar el archivo wheel en Amazon S3:

aws s3 cp doc-example-wheel s3://path/to/wheel/
aws s3 cp grpcio-1.32.0-cp37-cp37m-linux_x86_64.whl s3://aws-glue-add-modules/grpcio/

Asegúrese de sustituir los siguientes valores en los comandos anteriores:

  • doc-example-wheel por el nombre del archivo wheel generado
  • grpcio-1.32.0-cp37-cp37m-linux_x86_64.whl por el nombre del archivo del paquete de Python

7.    En la consola de AWS Glue, en Parámetros del trabajo, siga estos pasos en relación con el trabajo de ETL de AWS Glue: En Clave, escriba --additional-python-modules.
En Valor, introduzca s3://aws-glue-add-modules/grpcio/grpcio-1.32.0-cp37-cp37m-linux_x86_64.whl.
Nota: Asegúrese de sustituir grpcio-1.32.0-cp37-cp37m-linux_x86_64.whl por el nombre del archivo del paquete de Python.

Importante: Las versiones 0.9 y 1.0 de AWS Glue no admiten los módulos de Python escritos en C. Para instalar una biblioteca de Python externa en AWS Glue 0.9 y 1.0, consulte ¿Cómo puedo utilizar bibliotecas externas de Python en mi trabajo de ETL de AWS Glue 1.0 o 0.9?


Información relacionada

Using Python libraries with AWS Glue

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años