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.
Rubriques
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 suranalytics
. Lorsque vous désélectionnez cette option, l'optionlibrary-set
est définie surnone
. - 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
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
-
Créez un cluster Amazon Redshift dans un Virtual Private Cloud (VPC) et ajoutez des données dans une table.
-
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.
-
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'] )
-
Dans le répertoire
redshift_example
, créez un répertoireredshift_module
. Dans le répertoireredshift_module
, créez les fichiers__init__.py
etpygresql_redshift_common.py
. -
Laissez le fichier
__init__.py
vide. Collez le code suivant danspygresql_redshift_common.py
. Remplacezport
,db_name
,user
etpassword_for_user
par les informations spécifiques à votre cluster Amazon Redshift. Remplaceztable-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 * fromtable_name
;" res = con.query(statement) return res -
Si vous n'êtes pas déjà dans le répertoire
redshift_example
, accédez-y. -
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
-
Installez les dépendances qui sont nécessaires à la commande précédente.
-
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
ous3://DOC-EXAMPLE-BUCKET/WHEEL-FILE
. -
-
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 -
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
. -
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
.