Comment puis-je utiliser des bibliothèques Python externes dans ma tâche ETL AWS Glue 2.0 ?

Dernière mise à jour : 02/12/2021

Je souhaite utiliser des bibliothèques Python externes dans une tâche extract-transform-load (ETL) AWS Glue 2.0.

Résolution

AWS Glue version 2.0 vous permet d'installer des modules Python supplémentaires ou d’autres versions au niveau de la tâche. Pour ajouter un nouveau module ou modifier la version d'un module existant, utilisez la clé de paramètre de tâche --additional-python-modules avec une valeur contenant une liste de modules Python séparés par des virgules. Cela permet à votre tâche ETL AWS Glue 2.0 d'installer les modules supplémentaires à l'aide du programme d'installation de packages Python (pip3).

Pour installer un module Python supplémentaire pour votre tâche AWS Glue, procédez comme suit :

  1. Ouvrez la console AWS Glue.
  2. Dans le panneau de navigation, choisissez Tâches.
  3. Sélectionnez la tâche dans laquelle vous souhaitez ajouter le module Python.
  4. Choisissez Actions, puis Modifier la tâche.
  5. Développez la section Configuration de la sécurité, bibliothèques de scripts et paramètres de tâche (facultatif).
  6. Sous Paramètres de tâche, procédez comme suit :
    Pour Clé, saisissez --additional-python-modules.
    Pour Valeur, saisissez pymysql==1.0.2, s3://aws-glue-add-modules/nltk-3.6.2-py3-none-any.whl.
  7. Choisissez Enregistrer.

Ces étapes constituent un exemple d'installation de deux modules différents :

  • PyMySQL via Internet
  • Natural Language Toolkit (NLTK) à partir d'un fichier roue sur Amazon Simple Storage Service (Amazon S3)

L'installation d'un nouveau module ou la mise à jour d'un module existant nécessite le téléchargement de dépendances qui lui sont liées. Autrement dit, vous devez avoir accès à Internet pour effectuer l'une ou l'autre de ces tâches. Si vous n'avez pas accès à Internet, allez sur Création de modules Python à partir d'une roue pour les applications Spark ETL à l'aide d'AWS Glue 2.0.

Pour obtenir la liste des modules Python supplémentaires disponibles dans AWS Glue 2.0, consultez Modules Python disponibles dans AWS Glue version 2.0.

Les bibliothèques et les modules d'extension écrits dans C sont également pris en charge par AWS Glue 2.0 avec l'option --additional-python-modules. Toutefois, l’installation d’un sous-ensemble de modules Python comme spacy et grpc requiert des autorisations racine. Sans autorisations racine, la compilation de ces modules échoue pendant l'installation. AWS Glue ne fournit pas d'accès racine pendant l'installation du package. La solution consiste à précompiler les binaires dans une roue compatible avec AWS Glue et à installer cette roue.

Pour compiler une bibliothèque dans un langage C, il faut que le compilateur soit compatible avec le système d'exploitation cible et l'architecture du processeur. Si la bibliothèque est compilée sur un système d'exploitation ou une architecture de processeur différente, la wheel n'est pas installée dans AWS Glue. AWS Glue étant un service géré, l'accès au cluster n'est pas disponible pour développer ces dépendances. Pour précompiler le module Python basé sur C qui nécessite des autorisations racine, procédez comme suit :

Remarque : ces étapes fournissent un modèle d'installation du module grpcio.

1.    Lancez une instance Linux Amazon Elastic Compute Cloud (Amazon EC2) avec suffisamment d'espace volume pour vos bibliothèques.

2.    Installez le conteneur Docker sur l'instance, configurez l'accès non-sudo, puis démarrez le docker.

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

3.    Créez un fichier dockerfile_grpcio et copiez dans le fichier ce qui suit :

# 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.    Exécutez la version Docker pour créer votre Dockerfile. Exécutez les commandes suivantes pour redémarrer le démon Docker :

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

5.    Extrayez le fichier de roue du conteneur docker. Exécutez les commandes suivantes pour extraire le fichier .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 .

Veillez à remplacer les valeurs suivantes dans les commandes précédentes :

  • 1111222233334444 par l'image Docker
  • 5555666677778888 par l'ID du conteneur
  • doc-example-wheel par le nom du fichier de roue généré

6.    Téléchargez la roue sur Amazon S3 en exécutant les commandes suivantes :

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/

Veillez à remplacer les valeurs suivantes dans les commandes précédentes :

  • doc-example-wheel par le nom du fichier de roue généré
  • grpcio-1.32.0-cp37-cp37m-linux_x86_64.whl par le nom du fichier de package Python

7.    Pour la tâche ETL AWS Glue, dans la console AWS Glue, sous Paramètres de tâche, procédez comme suit : Pour Clé, saisissez --additional-python-modules.
Pour Valeur, saisissez s3://aws-glue-add-modules/grpcio/grpcio-1.32.0-cp37-cp37m-linux_x86_64.whl.
Remarque : Assurez-vous de remplacer grpcio-1.32.0-cp37-cp37m-linux_x86_64.whl par le nom du fichier de package Python.

Important : les versions 0.9 et 1.0 d'AWS Glue ne prennent pas en charge les modules Python écrits en C. Pour installer une bibliothèque Python externe dans AWS Glue 0.9 et 1.0, consultez la section Comment utiliser des bibliothèques Python externes dans ma tâche AWS Glue 1.0 et 0.9 ETL ?


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?