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 :
    Pour Clé, entrez --additional-python-modules.
    Pour 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 à l’aide d’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) 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 un accès non sudo :

    sudo usermod -a -G docker ec2-user

    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 :

    \# 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 :

    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. Par 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 :
    Pour Clé, entrez --additional-python-modules.
    Pour 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 OFFICIEL
AWS OFFICIELA mis à jour il y a 3 mois