Comment puis-je utiliser des bibliothèques Python externes dans ma tâche ETL AWS Glue ?
Je souhaite utiliser des bibliothèques Python externes dans une tâche d’extraction, de transformation et de chargement (ETL) AWS Glue.
Brève description
Lorsque vous utilisez les versions 2.0, 3.0 et 4.0 d'AWS Glue, vous pouvez installer des modules Python supplémentaires ou différentes versions de modules 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. La valeur de la clé est une liste de noms de modules Python séparés par des virgules. Lorsque vous utilisez ce paramètre, votre tâche ETL AWS Glue installe les modules supplémentaires via le programme d'installation de package Python (pip3).
Vous pouvez également utiliser le paramètre --additional-python-modules pour installer des bibliothèques Python écrites dans des langages basés sur le langage C.
Résolution
Installer ou mettre à jour des modules Python
Pour installer un module Python supplémentaire pour votre tâche AWS Glue, procédez comme suit :
- Ouvrez la console AWS Glue.
- Dans le volet de navigation, choisissez Tâches.
- Sélectionnez la tâche pour laquelle vous souhaitez ajouter le module Python.
- Choisissez Actions, puis sélectionnez Modifier la tâche.
- Développez la section Configuration de sécurité, bibliothèques de scripts et paramètres de tâche (facultatif).
- Dans Paramètres de tâche, procédez comme suit :
Dans Clé, saisissez --additional-python-modules.
Dans Valeur, saisissez une liste de modules séparés par des virgules que vous souhaitez ajouter. - Sélectionnez Enregistrer.
Par exemple, supposons que vous souhaitiez ajouter deux nouveaux modules, la version 1.0.2 de PyMySQL et la version 3.6.2 du Natural Language Toolkit (NLTK). Vous installez le module PyMySQL depuis Internet et le module NLTK depuis un compartiment Amazon Simple Storage Service (Amazon S3). Dans ce cas, la clé de paramètre --additional-python-modules a la valeur pymysql==1.0.2, s3://aws-glue-add-modules/nltk-3.6.2-py3-none-any.whl.
Certains modules sont dépendants d'autres modules. Si vous installez ou mettez à jour un tel module, vous devez également télécharger les autres modules dont il dépend. Cela signifie que vous devez disposer d'un accès Internet pour installer ou mettre à jour le module. Si vous n’avez pas d’accès à Internet, consultez la section 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 inclus par défaut dans chaque version d'AWS Glue, consultez la section Modules Python déjà fournis dans AWS Glue.
Installer des modules Python basés sur C
Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l’AWS CLI.
AWS Glue prend également en charge les bibliothèques et les extensions écrites en C avec le paramètre --additional-python-modules. Cependant, certains modules Python, tels que spacy et grpc, nécessitent des autorisations racine pour être installés. AWS Glue ne fournit pas d’accès racine lors de l’installation du package. Pour résoudre ce problème, précompilez les binaires dans une roue compatible avec AWS Glue et installez 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 un module Python basé sur C qui nécessite des autorisations racine, procédez comme suit :
-
Lancez une instance Linux Amazon Elastic Compute Cloud (Amazon EC2) (AMI Amazon Linux 2) avec un espace de volume suffisant pour vos bibliothèques.
-
Installez Docker sur l'instance EC2, configurez un accès non sudo, puis démarrez Docker. Exécutez la commande suivante pour y parvenir :
Installez Docker :
sudo yum install docker -yConfigurez l'accès sudo :
sudo suDémarrez Docker :
sudo service docker start -
Créez un fichier Dockerfile pour le module. Par exemple, pour installer le module grpcio, créez un fichier nommé dockerfile_grpcio et copiez le contenu suivant dans le fichier :
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 -
Exécutez docker build pour créer votre Dockerfile :
docker build -f dockerfile\_grpcio . -
Redémarrez le démon Docker :
sudo service docker restartLorsque la commande docker build est terminée, vous recevez un message de réussite contenant votre ID d'image Docker. Exemple : "Successfully built 1111222233334444". Notez l’ID d’image Docker à utiliser dans l’étape suivante.
-
Extrayez le fichier roue .whl du conteneur Docker. Exécutez la commande suivante pour y parvenir :
Obtenez l’ID de l’image Docker :
docker image lsExécutez le conteneur, mais remplacez 1111222233334444 par votre ID d'image Docker :
docker run -dit 111122223334444Vérifiez l'emplacement du fichier roue et récupérez le nom du fichier roue, mais remplacez 5555666677778888 par votre ID de conteneur :
docker exec -t -i 5555666677778888 ls /root/wheel\_dir/Copiez la roue du conteneur Docker vers Amazon EC2 :
docker cp 5555666677778888:/root/wheel\_dir/doc-example-wheel .Remarque : Remplacez doc-example-wheel par le nom du fichier roue généré
-
Pour charger la roue sur Amazon S3, exécutez 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/Remarque : Remplacez grpcio-1.32.0-cp37-cp37m-linux_x86_64.whl par le nom du fichier de package Python.
-
Ouvrez la console AWS Glue.
-
Pour la tâche ETL AWS Glue, sous Paramètres de la tâche, saisissez les informations suivantes :
Dans Clé, saisissez --additional-python-modules.
Dans Valeur, saisissez s3://aws-glue-add-modules/grpcio/grpcio-1.32.0-cp37-cp37m-linux_x86_64.whl.
Informations connexes
Vidéos associées


Contenus pertinents
AWS OFFICIELA mis à jour il y a 2 ans