Configuration des propriétés des tâches pour les tâches du shell Python dans AWS Glue - AWS Glue

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Configuration des propriétés des tâches pour les tâches du shell Python dans AWS Glue

Vous pouvez utiliser une tâche shell Python pour exécuter des scripts Python en tant que shell dans AWS Glue. Avec une tâche shell Python, vous pouvez exécuter des scripts compatibles avec Python 3.6 ou Python 3.9.

Limites

Notez les limitations suivantes des tâches shell Python :

  • Vous ne pouvez pas utiliser les signets de tâche avec les tâches shell Python.

  • Vous ne pouvez pas empaqueter des bibliothèques Python sous forme de .egg fichiers dans Python 3.9+. Utilisez à la place .whl.

  • L'option --extra-files ne peut pas être utilisée en raison de la limitation des copies temporaires des données S3.

Définition des propriétés pour les tâches shell Python

Ces sections décrivent la définition des propriétés des tâches dans AWS Glue Studio ou à l'aide de la AWS CLI.

AWS Glue Studio

Lorsque vous définissez votre tâche Python shell dans AWS Glue Studio, vous indiquez les propriétés suivantes :

Rôle IAM

Spécifiez le rôle AWS Identity and Access Management (IAM) utilisé pour autoriser les ressources utilisées pour exécuter le travail et accéder aux magasins de données. Pour plus d'informations sur les autorisations requises pour exécuter des tâches dans AWS Glue, consultez Gestion des identités et des accès pour AWS Glue.

Type

Choisissez Python shell (shell Python) pour exécuter un script Python avec la commande de tâche nommée pythonshell.

Version Python

Choisissez la version Python. La valeur par défaut est Python 3.9. Les versions valides sont Python 3.6 et Python 3.9.

Charger des bibliothèques d'analyse courantes (recommandé)

Choisissez cette option pour inclure les bibliothèques courantes pour Python 3.9 dans le Python shell.

Si vos bibliothèques sont personnalisées ou si elles sont en conflit avec les bibliothèques préinstallées, vous pouvez choisir de ne pas installer de bibliothèques courantes. Cependant, vous pouvez installer des bibliothèques supplémentaires en plus des bibliothèques courantes.

Lorsque vous sélectionnez cette option, l'option library-set est définie sur analytics. Lorsque vous désélectionnez cette option, l'option library-set est définie sur none.

Nom du fichier de script et chemin du script

Le code inclus dans le script permet de définir la logique procédurale de votre tâche. Vous fournissez le nom et l'emplacement du script dans Amazon Simple Storage Service (Amazon S3). Vérifiez qu'il n'existe pas de fichier portant le même nom que le répertoire de script dans le chemin d'accès. Pour en savoir plus sur les scripts, consultez AWS Glue guide de programmation.

Script

Le code inclus dans le script permet de définir la logique procédurale de votre tâche. Vous pouvez coder ce script dans Python 3.6 ou Python 3.9. Vous pouvez modifier un script dans AWS Glue Studio.

Unités de traitement de données

Il s'agit du nombre maximal d'unités de traitement de données (DPU) AWS Glue qui peuvent être allouées lorsque la tâche s'exécute. Une DPU est une mesure relative de la puissance de traitement consistant en 4 vCPU de capacité de calcul et 16 Go de mémoire. Pour en savoir plus, consultez AWS Glue Tarification.

Vous pouvez affecter la valeur 0.0625 ou 1. La valeur par défaut est 0.0625. Dans les deux cas, le disque local de l'instance sera de 20 Go.

INTERFACE DE LIGNE DE COMMANDE (CLI)

Vous pouvez également créer une tâche shell Python à l'aide de AWS CLI, comme dans l'exemple suivant.

aws glue create-job --name python-job-cli --role Glue_DefaultRole --command '{"Name" : "pythonshell", "PythonVersion": "3.9", "ScriptLocation" : "s3://DOC-EXAMPLE-BUCKET/scriptname.py"}' --max-capacity 0.0625
Note

Il n'est pas nécessaire de spécifier la version de AWS Glue puisque le paramètre --glue-version ne s'applique pas aux tâches AWS Glue shell. Toute version spécifiée sera ignorée.

Tâches que vous créez avec Python 3 AWS CLI par défaut. Les versions valides de Python sont 3 (correspondant à 3.6), et 3.9. Pour spécifier Python 3.6, ajoutez ce tuple au paramètre --command : "PythonVersion":"3"

Pour spécifier Python 3.9, ajoutez ce tuple au paramètre --command : "PythonVersion":"3.9"

Pour définir la capacité maximale utilisée par une tâche shell Python, définissez le paramètre --max-capacity. Pour les tâches shell Python, le paramètre --allocated-capacity ne peut pas être utilisé.

Bibliothèques prises en charge pour les tâches shell Python

Dans le Python shell utilisant Python 3.9, vous pouvez choisir l'ensemble de bibliothèques qui utilisera les ensembles de bibliothèques préemballés selon vos besoins. Vous pouvez utiliser l'option library-set pour choisir l'ensemble de bibliothèques. Les valeurs valides sont analytics, et none.

L'environnement pour exécuter une tâche shell Python prend en charge les bibliothèques suivantes :

Version Python Python 3.6 Python 3.9
Ensemble de bibliothèques S/O analytique Aucun(e)
avro 1.11.0
awscli 116,242 1,23,5 1,23,5
awswrangler 2.15.1
botocore 1,12,232 1,24,21 1,23,5
boto3 1,9,203 1,21,21
elasticsearch 8.2.0
numpy 1.16,2 1.22.3
pandas 0,24,2 1.4.2
psycopg2 2.9.3
pyathena 2.5.3
PyGreSQL 5.0.6
PyMySQL 1.0.2
pyodbc 4,0,32
pyorc 0.6.0
redshift-connector 2,0.907
demandes 2.22.0 2.27.1
scikit-learn 0,20,3 1.0.2
scipy 1.2.1 1.8.0
SQLAlchemy 1,4,36
s3fs 2022.3.0

Vous pouvez utiliser la bibliothèque NumPy dans une tâche shell Python à des fins de calcul scientifique. Pour plus d'informations, consultez NumPy. L'exemple suivant montre un NumPy script qui peut être utilisé dans une tâche shell Python. Le script inscrit « Hello world » et les résultats de plusieurs calculs mathématiques.

import numpy as np print("Hello world") a = np.array([20,30,40,50]) print(a) b = np.arange( 4 ) print(b) c = a-b print(c) d = b**2 print(d)

Ajout de votre propre bibliothèque Python

Utilisation de PIP

Le Python shell utilisant Python 3.9 vous permet de fournir des modules Python supplémentaires ou des versions différentes au niveau de la tâche. Vous pouvez utiliser l'option --additional-python-modules avec une liste de modules Python séparés par des virgules pour ajouter un nouveau module ou modifier la version d'un module existant. Vous ne pouvez pas fournir de modules Python personnalisés hébergés sur Amazon S3 avec ce paramètre lorsque vous utilisez des tâches shell Python.

Par exemple, pour mettre à jour ou ajouter un nouveau module scikit-learn, utilisez la clé et la valeur suivantes : "--additional-python-modules", "scikit-learn==0.21.3".

AWS Glue utilise le programme d'installation de package Python (pip3) pour installer les modules supplémentaires. Vous pouvez transmettre des options pip3 supplémentaires à l'intérieur de la valeur --additional-python-modules. Par exemple, "scikit-learn==0.21.3 -i https://pypi.python.org/simple/". Toutes les incompatibilités ou limitations de pip3 s'appliquent.

Note

Pour éviter les incompatibilités à l'avenir, nous vous recommandons d'utiliser des bibliothèques créées pour Python 3.9.

Utilisation d'un fichier Egg ou Whl

Vous avez peut-être déjà une ou plusieurs bibliothèques Python empaquetées sous la forme d'un fichier .egg ou .whl. Le cas échéant, vous pouvez les spécifier pour votre tâche à l'aide du AWS Command Line Interface (AWS CLI) sous l'indicateur « --extra-py-files », comme dans l'exemple suivant.

aws glue create-job --name python-redshift-test-cli --role role --command '{"Name" : "pythonshell", "ScriptLocation" : "s3://MyBucket/python/library/redshift_test.py"}' --connections Connections=connection-name --default-arguments '{"--extra-py-files" : ["s3://DOC-EXAMPLE-BUCKET/EGG-FILE", "s3://DOC-EXAMPLE-BUCKET/WHEEL-FILE"]}'

Si vous n'êtes pas sûr de la façon de créer un fichier .egg ou .whl à partir d'une bibliothèque Python, procédez comme suit. Cet exemple est applicable sur macOS, Linux et WSL (sous-système Windows pour Linux).

Pour créer un fichier Python .egg ou .whl
  1. Créez un cluster Amazon Redshift dans un Virtual Private Cloud (VPC) et ajoutez des données dans une table.

  2. Créez une AWS Glue connexion pour la combinaison VPC- SecurityGroup -sous-réseau que vous avez utilisée pour créer le cluster. Testez le bon fonctionnement de cette connexion.

  3. Créez un répertoire nommé redshift_example et un fichier nommé setup.py. Collez le code suivant dans .

    from setuptools import setup setup( name="redshift_module", version="0.1", packages=['redshift_module'] )
  4. Dans le répertoire redshift_example, créez un répertoire redshift_module. Dans le répertoire redshift_module, créez les fichiers __init__.py et pygresql_redshift_common.py.

  5. Laissez le fichier __init__.py vide. Collez le code suivant dans pygresql_redshift_common.py. Remplacez port, db_name, user et password_for_user par les informations spécifiques à votre cluster Amazon Redshift. Remplacez table-name par le nom de votre table de base de données dans Amazon Redshift.

    import pg def get_connection(host): rs_conn_string = "host=%s port=%s dbname=%s user=%s password=%s" % ( host, port, db_name, user, password_for_user) rs_conn = pg.connect(dbname=rs_conn_string) rs_conn.query("set statement_timeout = 1200000") return rs_conn def query(con): statement = "Select * from table_name;" res = con.query(statement) return res
  6. Si vous n'êtes pas déjà dans le répertoire redshift_example, accédez-y.

  7. Effectuez l’une des actions suivantes :

    • Pour créer un fichier .egg, exécutez la commande suivante :

      python setup.py bdist_egg
    • Pour créer un fichier .whl, exécutez la commande suivante.

      python setup.py bdist_wheel
  8. Installez les dépendances qui sont nécessaires à la commande précédente.

  9. La commande crée un fichier dans le répertoire dist :

    • Si vous avez créé un fichier egg, il est nommé redshift_module-0.1-py2.7.egg.

    • Si vous avez créé un fichier Wheel, il est nommé redshift_module-0.1-py2.7-none-any.whl.

    Téléchargez vos fichiers sur Amazon S3.

    Dans cet exemple, le chemin du fichier chargé est s3://DOC-EXAMPLE-BUCKET/EGG-FILE ou s3://DOC-EXAMPLE-BUCKET/WHEEL-FILE.

  10. Créez un fichier Python à utiliser comme script pour la tâche AWS Glue et ajoutez le code suivant au fichier.

    from redshift_module import pygresql_redshift_common as rs_common con1 = rs_common.get_connection(redshift_endpoint) res = rs_common.query(con1) print "Rows in the table cities are: " print res
  11. Téléchargez le fichier précédent sur Amazon S3. Dans cet exemple, le chemin du fichier chargé est s3://DOC-EXAMPLE-BUCKET/scriptname.py.

  12. Créez une tâche shell Python à l'aide de ce script. Dans la console AWS Glue, dans la page Propriétés de la tâche, spécifiez le chemin d'accès au fichier .egg/.whl dans la zone Chemin de la bibliothèque Python. Si vous avez plusieurs fichiers .egg/.whl et fichiers Python, indiquez-les dans cette zone sous forme de liste de valeurs séparées par des virgules.

    Lors de la modification ou du changement de nom de fichiers .egg, les noms de ces derniers doivent utiliser les noms par défaut générés par la commande « python setup.py bdist_egg » ou doivent respecter les conventions de dénomination du module Python. Pour plus d'informations, consultez Style Guide for Python Code (Guide de style pour le code Python).

    À l'aide de AWS CLI, créez une tâche avec une commande, comme dans l'exemple suivant.

    aws glue create-job --name python-redshift-test-cli --role Role --command '{"Name" : "pythonshell", "ScriptLocation" : "s3://DOC-EXAMPLE-BUCKET/scriptname.py"}' --connections Connections="connection-name" --default-arguments '{"--extra-py-files" : ["s3://DOC-EXAMPLE-BUCKET/EGG-FILE", "s3://DOC-EXAMPLE-BUCKET/WHEEL-FILE"]}'

    Lorsque la tâche s'exécute, le script inscrit les lignes créées dans la table table_name, dans le cluster Amazon Redshift.

À utiliser AWS CloudFormation avec les jobs shell Python dans AWS Glue

Vous pouvez les utiliser AWS CloudFormation avec des jobs shell Python dansAWS Glue. Voici un exemple :

AWSTemplateFormatVersion: 2010-09-09 Resources: Python39Job: Type: 'AWS::Glue::Job' Properties: Command: Name: pythonshell PythonVersion: '3.9' ScriptLocation: 's3://bucket/location' MaxRetries: 0 Name: python-39-job Role: RoleName

Le groupe Amazon CloudWatch Logs pour les résultats des tâches shell Python est/aws-glue/python-jobs/output. Pour les erreurs, consultez le groupe de journaux /aws-glue/python-jobs/error.