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

Lecture de 5 minute(s)
0

Je souhaite utiliser des bibliothèques Python externes dans des tâches d’extraction, transformation et chargement (ETL) AWS Glue 2.0.

Résolution

Avec AWS Glue version 2.0, vous pouvez installer des modules Python supplémentaires ou des versions différentes au niveau des tâches. Pour ajouter un nouveau module ou modifier la version d’un module existant, utilisez la clé du paramètre de tâche --additional-python-modules avec une valeur contenant une liste de modules Python séparés par des virgules. Cette clé 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 volet de navigation, choisissez Tâches.
  3. Sélectionnez la tâche pour laquelle vous souhaitez ajouter le module Python.
  4. Choisissez Actions, puis sélectionnez Modifier la tâche.
  5. Développez la section Configuration de sécurité, bibliothèques de scripts et paramètres de tâche (facultatif).
  6. Dans Paramètres de tâche, procédez comme suit :
    Pour Clé, entrez --additional-python-modules.
    Dans Valeur, entrez pymysql==1.0.2, s3://aws-glue-add-modules/nltk-3.6.2-py3-none-any.whl.
  7. Choisissez Enregistrer.

Ces étapes illustrent l’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 des dépendances liées au module. Cette étape nécessite que vous disposiez d’un accès à l’Internet pour effectuer une de ces tâches. Si vous n’avez pas d’accès à Internet, consultez Création de modules Python à partir d’une roue pour les charges de travail Spark ETL en utilisant AWS Glue 2.0.

Pour obtenir la liste des modules Python déjà fournis dans AWS Glue 2.0, consultez la section Modules Python déjà fournis dans AWS Glue version 2.0.

Les bibliothèques et les modules d’extension écrits en C sont également pris en charge par AWS Glue 2.0 avec l’option --additional-python-modules. Cependant, un sous-ensemble de modules Python, tels que spacy et grpc, nécessitent des autorisations super-utilisateur pour être installés. Sans autorisations super-utilisateur, la compilation de ces modules échoue lors de l’installation. AWS Glue ne fournit pas d’accès super-utilisateur lors de l’installation du package. La solution consiste à précompiler les binaires dans une roue compatible avec AWS Glue et à installer la roue en question.

Pour compiler une bibliothèque dans un langage C, le compilateur doit être compatible avec le système d’exploitation cible et l’architecture du processeur. Si la bibliothèque est compilée selon un système d’exploitation ou une architecture du processeur différent, la roue 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 en C qui nécessite des autorisations super-utilisateur, procédez comme suit :

Remarque : ces étapes fournissent un exemple d’installation du module grpcio.

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

2.    Installez le conteneur Docker sur l’instance, configurez l’accès non-sudo, puis démarrez 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 ce qui suit dans le fichier :

# 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 docker build 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 .

Lorsque la commande docker build est terminée, un message de réussite s’affiche avec votre ID d’image Docker. Par exemple, « Successfully built 1111222233334444. » Notez l’ID d’image Docker à utiliser dans l’étape suivante.

5.    Extrayez le fichier 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’ID de 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é, entrez --additional-python-modules.
Pour Valeur, entrez s3://aws-glue-add-modules/grpcio/grpcio-1.32.0-cp37-cp37m-linux_x86_64.whl.
Remarque : veillez à 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 Comment puis-je utiliser des bibliothèques Python externes dans ma tâche ETL AWS Glue 1.0 ou 0.9 ?


Informations connexes

Utilisation de bibliothèques Python avec AWS Glue

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 2 ans