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.
Génération de données de test à l'aide d'une tâche AWS Glue et de Python
Créée par Moinul Al-Mamun () AWS
Environnement : Production | Technologies : analyse CloudNative ; lacs de données DevelopmentAndTesting ; sans serveur ; mégadonnées | AWSservices : AWS Glue ; Amazon S3 |
Récapitulatif
Ce modèle vous montre comment générer rapidement et facilement des millions d'exemples de fichiers simultanément en créant une tâche AWS Glue écrite en Python. Les fichiers d'exemple sont stockés dans un compartiment Amazon Simple Storage Service (Amazon S3). La capacité à générer rapidement un grand nombre d'échantillons de fichiers est importante pour tester ou évaluer les services dans le AWS cloud. Par exemple, vous pouvez tester les performances des DataBrew tâches AWS Glue Studio ou AWS Glue en analysant les données de millions de petits fichiers contenus dans un préfixe Amazon S3.
Bien que vous puissiez utiliser d'autres AWS services pour générer des exemples de jeux de données, nous vous recommandons d'utiliser AWS Glue. Vous n'avez pas besoin de gérer d'infrastructure car AWS Glue est un service de traitement de données sans serveur. Vous pouvez simplement apporter votre code et l'exécuter dans un cluster AWS Glue. En outre, AWS Glue fournit, configure et adapte les ressources nécessaires à l'exécution de vos tâches. Vous ne payez que pour les ressources utilisées par vos tâches pendant leur exécution.
Conditions préalables et limitations
Prérequis
Un AWS compte actif
AWSInterface de ligne de commande (AWSCLI), installée et configurée pour fonctionner avec le AWS compte
Versions du produit
Python 3.9
AWSCLIversion 2
Limites
Le nombre maximum de tâches AWS Glue par déclencheur est de 50. Pour plus d'informations, consultez AWSla section Points de terminaison et quotas Glue.
Architecture
Le schéma suivant décrit un exemple d'architecture centré sur une tâche AWS Glue qui écrit sa sortie (c'est-à-dire des fichiers d'exemple) dans un compartiment S3.
Le diagramme inclut le flux de travail suivant :
Vous utilisez la AWS CLI console AWS de gestion ou un API pour lancer la tâche AWS Glue. Le AWS CLI or vous API permet d'automatiser la parallélisation de la tâche invoquée et de réduire le temps d'exécution nécessaire à la génération de fichiers d'exemple.
La tâche AWS Glue génère le contenu du fichier de manière aléatoire, le convertit en CSV format, puis le stocke sous la forme d'un objet Amazon S3 sous un préfixe commun. La taille de chaque fichier est inférieure à un kilo-octet. La tâche AWS Glue accepte deux paramètres de tâche définis par l'utilisateur :
START_RANGE
etEND_RANGE
. Vous pouvez utiliser ces paramètres pour définir les noms de fichiers et le nombre de fichiers générés dans Amazon S3 par chaque tâche exécutée. Vous pouvez exécuter plusieurs instances de cette tâche en parallèle (par exemple, 100 instances).
Outils
Amazon Simple Storage Service (Amazon S3) est un service de stockage d'objets basé sur le cloud qui vous permet de stocker, de protéger et de récupérer n'importe quel volume de données.
AWSL'interface de ligne de commande (AWSCLI) est un outil open source qui vous permet d'interagir avec les AWS services par le biais de commandes dans votre interface de ligne de commande.
AWSGlue est un service d'extraction, de transformation et de chargement (ETL) entièrement géré. Il vous aide à classer, nettoyer, enrichir et déplacer les données de manière fiable entre les magasins de données et les flux de données.
AWSIdentity and Access Management (IAM) vous aide à gérer en toute sécurité l'accès à vos AWS ressources en contrôlant qui est authentifié et autorisé à les utiliser.
Bonnes pratiques
Tenez compte des bonnes pratiques suivantes en matière de AWS Glue lorsque vous implémentez ce modèle :
Utilisez le bon type de AWS Glue Worker pour réduire les coûts. Nous vous recommandons de comprendre les différentes propriétés des types de travailleurs, puis de choisir le type de travailleur adapté à votre charge de travail en fonction CPU de vos besoins en mémoire. Pour ce modèle, nous vous recommandons d'utiliser une tâche shell Python comme type de tâche afin de minimiser DPU et de réduire les coûts. Pour plus d'informations, consultez la section Ajouter des tâches dans AWS Glue dans le AWS Glue Developer Guide.
Utilisez la bonne limite de simultanéité pour adapter votre travail. Nous vous recommandons de baser la simultanéité maximale de votre tâche AWS Glue sur le temps nécessaire et le nombre de fichiers requis.
Commencez par générer un petit nombre de fichiers. Pour réduire les coûts et gagner du temps lors de la création de vos tâches AWS Glue, commencez par un petit nombre de fichiers (1 000, par exemple). Cela peut faciliter le dépannage. Si la génération d'un petit nombre de fichiers est réussie, vous pouvez passer à un plus grand nombre de fichiers.
Exécutez d'abord localement. Pour réduire les coûts et gagner du temps lors de la création de vos jobs AWS Glue, lancez le développement localement et testez votre code. Pour obtenir des instructions sur la configuration d'un conteneur Docker qui peut vous aider à écrire des tâches AWS Glue extract, transform et load (ETL) à la fois dans un shell et dans un environnement de développement intégré (IDE), consultez l'article Developing AWS Glue ETL jobs locally using a container
sur le AWS Big Data Blog.
Pour en savoir plus AWS sur les meilleures pratiques en matière de Glue, consultez la section Meilleures pratiques de la documentation AWS Glue.
Épopées
Tâche | Description | Compétences requises |
---|---|---|
Créez un compartiment S3 pour stocker les fichiers. | Créez un compartiment S3 et un préfixe à l'intérieur de celui-ci. Remarque : Ce modèle utilise l' | Développeur d'applications |
Créez et configurez un IAM rôle. | Vous devez créer un IAM rôle que votre tâche AWS Glue peut utiliser pour écrire dans votre compartiment S3.
| Développeur d'applications |
Tâche | Description | Compétences requises |
---|---|---|
Créez une tâche AWS Glue. | Vous devez créer une tâche AWS Glue qui génère votre contenu et le stocke dans un compartiment S3. Créez une tâche AWS Glue, puis configurez votre tâche en effectuant les étapes suivantes :
| Développeur d'applications |
Mettez à jour le code de tâche. |
| Développeur d'applications |
Tâche | Description | Compétences requises |
---|---|---|
Exécutez le job AWS Glue depuis la ligne de commande. | Pour exécuter votre tâche AWS Glue depuis le AWSCLI, exécutez la commande suivante en utilisant vos valeurs :
Remarque : pour obtenir des instructions sur l'exécution de la tâche AWS Glue depuis la console de AWS gestion, consultez l'article sur ce modèle de la tâche Run the AWS Glue dans la console de AWS gestion. Conseil : Nous vous recommandons d'utiliser les tâches AWS CLI to run AWS Glue si vous souhaitez exécuter plusieurs exécutions à la fois avec des paramètres différents, comme indiqué dans l'exemple ci-dessus. Pour générer toutes les AWS CLI commandes nécessaires à la génération d'un nombre défini de fichiers à l'aide d'un certain facteur de parallélisation, exécutez le code bash suivant (en utilisant vos valeurs) :
Si vous utilisez le script ci-dessus, tenez compte des points suivants :
Remarque : Pour voir un exemple de sortie du script ci-dessus, consultez la section Sortie du script Shell dans la section Informations supplémentaires de ce modèle. | Développeur d'applications |
Exécutez le job AWS Glue dans la console AWS de gestion. |
| Développeur d'applications |
Vérifiez le statut de votre tâche AWS Glue. |
| Développeur d'applications |
Ressources connexes
Références
Guides et modèles
Informations supplémentaires
Test d'analyse comparative
Ce modèle a été utilisé pour générer 10 millions de fichiers à l'aide de différents paramètres de parallélisation dans le cadre d'un test d'analyse comparative. Le tableau suivant montre le résultat du test :
Parallélisation | Nombre de fichiers générés par l'exécution d'une tâche | Durée du job | Speed (Vitesse) |
10 | 1 000 000 | 6 heures, 40 minutes | Très lent |
50 | 200 000 | 80 minutes | Modérée |
100 | 100 000 | 40 minutes | Rapide |
Si vous souhaitez accélérer le processus, vous pouvez configurer davantage d'exécutions simultanées dans la configuration de votre tâche. Vous pouvez facilement ajuster la configuration des tâches en fonction de vos besoins, mais gardez à l'esprit qu'il existe une limite de quota pour le service AWS Glue. Pour plus d'informations, consultez AWSla section Points de terminaison et quotas Glue.
Sortie du script Shell
L'exemple suivant montre la sortie du script shell de la tâche Run the AWS Glue à partir de l'histoire de la ligne de commande selon ce modèle.
user@MUC-1234567890 MINGW64 ~ $ # define parameters NUMBER_OF_FILES=10000000; PARALLELIZATION=50; # initialize _SB=0; # generate commands for i in $(seq 1 $PARALLELIZATION); do echo aws glue start-job-run --job-name create_small_files --arguments "'"'{"--START_RANGE":"'$(((NUMBER_OF_FILES/PARALLELIZATION) (i-1) + SB))'","--ENDRANGE":"'$(((NUMBER_OF_FILES/PARALLELIZATION) (i)))'"}'"'"; _SB=1; done aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"0","--END_RANGE":"200000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"200001","--END_RANGE":"400000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"400001","--END_RANGE":"600000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"600001","--END_RANGE":"800000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"800001","--END_RANGE":"1000000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"1000001","--END_RANGE":"1200000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"1200001","--END_RANGE":"1400000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"1400001","--END_RANGE":"1600000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"1600001","--END_RANGE":"1800000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"1800001","--END_RANGE":"2000000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"2000001","--END_RANGE":"2200000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"2200001","--END_RANGE":"2400000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"2400001","--END_RANGE":"2600000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"2600001","--END_RANGE":"2800000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"2800001","--END_RANGE":"3000000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"3000001","--END_RANGE":"3200000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"3200001","--END_RANGE":"3400000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"3400001","--END_RANGE":"3600000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"3600001","--END_RANGE":"3800000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"3800001","--END_RANGE":"4000000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"4000001","--END_RANGE":"4200000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"4200001","--END_RANGE":"4400000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"4400001","--END_RANGE":"4600000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"4600001","--END_RANGE":"4800000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"4800001","--END_RANGE":"5000000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"5000001","--END_RANGE":"5200000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"5200001","--END_RANGE":"5400000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"5400001","--END_RANGE":"5600000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"5600001","--END_RANGE":"5800000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"5800001","--END_RANGE":"6000000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"6000001","--END_RANGE":"6200000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"6200001","--END_RANGE":"6400000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"6400001","--END_RANGE":"6600000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"6600001","--END_RANGE":"6800000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"6800001","--END_RANGE":"7000000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"7000001","--END_RANGE":"7200000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"7200001","--END_RANGE":"7400000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"7400001","--END_RANGE":"7600000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"7600001","--END_RANGE":"7800000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"7800001","--END_RANGE":"8000000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"8000001","--END_RANGE":"8200000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"8200001","--END_RANGE":"8400000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"8400001","--END_RANGE":"8600000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"8600001","--END_RANGE":"8800000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"8800001","--END_RANGE":"9000000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"9000001","--END_RANGE":"9200000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"9200001","--END_RANGE":"9400000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"9400001","--END_RANGE":"9600000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"9600001","--END_RANGE":"9800000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"9800001","--END_RANGE":"10000000"}' user@MUC-1234567890 MINGW64 ~
FAQ
Combien d'exécutions simultanées ou de tâches parallèles dois-je utiliser ?
Le nombre d'exécutions simultanées et de tâches parallèles dépend du temps dont vous avez besoin et du nombre de fichiers de test souhaités. Nous vous recommandons de vérifier la taille des fichiers que vous créez. Tout d'abord, vérifiez le temps nécessaire à une tâche AWS Glue pour générer le nombre de fichiers souhaité. Utilisez ensuite le bon nombre de courses simultanées pour atteindre vos objectifs. Par exemple, si vous supposez qu'il faut 40 minutes pour terminer l'exécution de 100 000 fichiers alors que votre objectif est de 30 minutes, vous devez augmenter le paramètre de simultanéité pour votre tâche AWS Glue.
Quel type de contenu puis-je créer à l'aide de ce modèle ?
Vous pouvez créer n'importe quel type de contenu, tel que des fichiers texte avec différents délimiteurs (par exemplePIPE,JSON, ouCSV). Ce modèle utilise Boto3 pour écrire dans un fichier, puis enregistre le fichier dans un compartiment S3.
De quel niveau d'IAMautorisation ai-je besoin dans le compartiment S3 ?
Vous devez disposer d'une politique basée sur l'identité qui autorise Write
l'accès aux objets de votre compartiment S3. Pour plus d'informations, consultez Amazon S3 : autorise l'accès en lecture et en écriture aux objets d'un compartiment S3 dans la documentation Amazon S3.