Passer au contenu

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

Lecture de 6 minute(s)
0

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 :

  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 :
    Dans Clé, saisissez --additional-python-modules.
    Dans Valeur, saisissez une liste de modules séparés par des virgules que vous souhaitez ajouter.
  7. 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 :

  1. Lancez une instance Linux Amazon Elastic Compute Cloud (Amazon EC2) (AMI Amazon Linux 2) avec un espace de volume suffisant pour vos bibliothèques.

  2. 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 -y

    Configurez l'accès sudo :

    sudo su

    Démarrez Docker :

    sudo service docker start
  3. 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
  4. Exécutez docker build pour créer votre Dockerfile :

    docker build -f dockerfile\_grpcio .
  5. Redémarrez le démon Docker :

    sudo service docker restart

    Lorsque 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.

  6. 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 ls

    Exécutez le conteneur, mais remplacez 1111222233334444 par votre ID d'image Docker :

    docker run -dit 111122223334444

    Vé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é

  7. 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.

  8. Ouvrez la console AWS Glue.

  9. 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

Utilisation de bibliothèques Python avec AWS Glue

AWS OFFICIELA mis à jour il y a 8 mois