Complete a 3 Question Survey and Earn a re:Post Badge
Help improve AWS Support Official channel in re:Post and share your experience - complete a quick three-question survey to earn a re:Post badge!
¿Cómo puedo utilizar bibliotecas de Python externas en mi trabajo de ETL de AWS Glue?
Quiero usar bibliotecas de Python externas en un trabajo de extracción, transformación y carga (ETL) de AWS Glue.
Descripción corta
Cuando usas las versiones 2.0, 3.0 y 4.0 de AWS Glue, puedes instalar módulos de Python adicionales o diferentes versiones de módulos a nivel de trabajo. Para agregar un módulo nuevo o cambiar la versión de un módulo existente, usa la clave de parámetro de trabajo --additional-python-modules. El valor de la clave es una lista de nombres de módulos de Python separados por comas. Cuando usas este parámetro, el trabajo de ETL de AWS Glue instala los módulos adicionales mediante el instalador de paquetes de Python (pip3).
También puedes usar el parámetro --additional-python-modules para instalar bibliotecas de Python que estén escritas en lenguajes basados en C.
Resolución
Instalación o actualización de los módulos de Python
Para instalar un módulo de Python adicional para el trabajo de AWS Glue, sigue estos pasos:
- Abre la consola de AWS Glue.
- En el panel de navegación, elige Trabajos.
- Selecciona el trabajo en el que desees agregar el módulo de Python.
- Elige Acciones y, a continuación, Editar trabajo.
- Amplía la sección Configuración de seguridad, bibliotecas de scripts y parámetros del trabajo (opcional).
- En Parámetros del trabajo, sigue estos pasos:
En Clave, escribe --additional-python-modules.
En Valor, introduce una lista separada por comas de los módulos que deseas añadir. - Selecciona Guardar.
Por ejemplo, supongamos que quieres añadir dos módulos nuevos, la versión 1.0.2 de PyMySQL y la versión 3.6.2 del Natural Language Toolkit (NLTK). El módulo PyMySQL se instala desde Internet y el módulo NLTK desde un bucket de Amazon Simple Storage Service (Amazon S3). En ese caso, la clave de parámetro --additional-python-modules tiene el valor pymysql==1.0.2, s3://aws-glue-add-modules/nltk-3.6.2-py3-none-any.whl.
Algunos módulos tienen dependencias en otros módulos. Si instalas o actualizas un módulo de este tipo, también debes descargar los demás módulos de los que depende. Esto significa que debes tener acceso a Internet para instalar o actualizar el módulo. Si no tienes acceso a Internet, consulta Creación de módulos de Python a partir de un archivo wheel para cargas de trabajo de ETL de Spark mediante AWS Glue 2.0.
Para obtener una lista de los módulos de Python que se incluyen en cada versión de AWS Glue de forma predeterminada, consulta los módulos de Python que ya se proporcionan en AWS Glue.
Instalación de módulos de Python basados en C
Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulta Solución de problemas de AWS CLI. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.
AWS Glue también admite bibliotecas y extensiones escritas en C con el parámetro --additional-python-modules. Sin embargo, para instalar algunos módulos de Python, como spacy y grpc, se requieren permisos raíz. AWS Glue no proporciona acceso raíz durante la instalación del paquete. Para resolver el problema, precompila los binarios en un archivo wheel compatible con AWS Glue e instala 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 un módulo de Python basado en C que requiere permisos raíz, sigue estos pasos:
-
Inicia una instancia de Linux de Amazon Elastic Compute Cloud (Amazon EC2) (AMI de Amazon Linux 2) con suficiente espacio de volumen para tus bibliotecas.
-
Instala Docker en la instancia de EC2, configura el acceso que no sea de sudo y, a continuación, inicia Docker. Para ello, ejecuta los siguientes comandos:
Instala Docker:
sudo yum install docker -y
Configura el acceso a sudo:
sudo su
Inicia Docker:
sudo service docker start
-
Crea un archivo Dockerfile para el módulo. Por ejemplo, para instalar el módulo grpcio, crea un archivo denominado dockerfile_grpcio y copia el siguiente contenido en el archivo:
FROM amazonlinux:2 \# Install required repositories and tools RUN yum update -y RUN yum install shadow-utils.x86\_64 -y \# Install Java 8 (corrected package name) RUN yum install -y java-1.8.0-openjdk.x86\_64 \# Install Python 3.7 WORKDIR /opt RUN yum install -y gcc openssl-devel bzip2-devel libffi-devel wget tar make \# Install Python 3.7 RUN wget https://www.python.org/ftp/python/3.7.12/Python-3.7.12.tgz RUN tar xzf Python-3.7.12.tgz WORKDIR /opt/Python-3.7.12 RUN ./configure --enable-optimizations RUN make altinstall RUN ln -sf /usr/local/bin/python3.7 /usr/bin/python3 RUN ln -sf /usr/local/bin/pip3.7 /usr/bin/pip3 \# Verify Python version RUN python3 --version RUN pip3 --version \# Install other dependencies RUN yum install -y doxygen autoconf automake libtool zlib-devel openssl-devel maven wget protobuf-compiler cmake make gcc-c++ RUN yum install -y python3-devel \# Install Python packages RUN pip3 install --upgrade pip RUN pip3 install wheel RUN pip3 install cython numpy scipy RUN pip3 install cmake scikit-build \# Create wheel directory and install grpcio WORKDIR /root RUN mkdir wheel\_dir RUN pip3 install Cython RUN pip3 install grpcio RUN pip3 wheel grpcio -w wheel\_dir
-
Ejecuta el comando docker build para crear el Dockerfile:
docker build -f dockerfile\_grpcio .
-
Reinicia el daemon de Docker:
sudo service docker restart
Cuando se complete el comando docker build, recibirás un mensaje de éxito que contiene tu ID de imagen de Docker. Por ejemplo, «Successfully built 1111222233334444». Anota el identificador de la imagen de Docker para utilizarlo en el siguiente paso.
-
Extrae el archivo wheel .whl del contenedor de Docker. Para ello, ejecuta los siguientes comandos:
Obtén el identificador de la imagen de Docker:
docker image ls
Ejecuta el contenedor, pero reemplaza 1111222233334444 por tu ID de imagen de Docker:
docker run -dit 111122223334444
Comprueba la ubicación del archivo wheel y recupera el nombre del archivo wheel, pero sustituye 5555666677778888 por tu ID de contenedor:
docker exec -t -i 5555666677778888 ls /root/wheel\_dir/
Copia el archivo wheel del contenedor de Docker en Amazon EC2:
docker cp 5555666677778888:/root/wheel\_dir/doc-example-wheel .
Nota: Sustituye doc-example-wheel por el nombre del archivo wheel generado.
-
Para cargar el archivo wheel en Amazon S3, ejecuta los siguientes comandos:
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/
Nota: Sustituye grpcio-1.32.0-cp37-cp37m-linux_x86_64.whl por el nombre del archivo de paquete Python.
-
Abre la consola de AWS Glue.
-
Para el trabajo de ETL de AWS Glue, en Parámetros del trabajo, introduce lo siguiente:
En Clave, escribe --additional-python-modules.
En Valor, introduce s3://aws-glue-add-modules/grpcio/grpcio-1.32.0-cp37-cp37m-linux_x86_64.whl.
Información relacionada

Contenido relevante
- preguntada hace 4 meseslg...
- preguntada hace 16 díaslg...
- preguntada hace 3 meseslg...
- preguntada hace 5 meseslg...