Comment configurer une tâche ETL AWS Glue pour générer des fichiers plus volumineux ?

Date de la dernière mise à jour : 16/03/2020

Je souhaite configurer une tâche ETL AWS Glue pour générer un petit nombre de fichiers volumineux plutôt qu'un grand nombre de petits fichiers. Comment procéder ?

Solution

Utilisez l'une des méthodes suivantes, ou les deux, pour réduire le nombre de fichiers de sortie pour une tâche ETL AWS Glue.

Augmentez la valeur du paramètre groupSize

Le regroupement est activé automatiquement lorsque vous utilisez des trames dynamiques et lorsque l'ensemble de données Amazon Simple Storage Service (Amazon S3) contient plus de 50 000 fichiers. La valeur par défaut du paramètre de groupSize est 1 Mo. Augmentez cette valeur pour créer des fichiers de sortie moins nombreux, mais plus volumineux. Pour plus d'informations, consultez l'article Lecture des fichiers en entrée dans des groupes de plus grande taille.

Dans l'exemple suivant, le paramètre groupSize est défini sur 10485760 octets (100 Mo) :

dyf = glueContext.create_dynamic_frame_from_options("s3", {'paths': ["s3://awsexamplebucket/"], 'groupFiles': 'inPartition', 'groupSize': '10485760'}, format="json")

Utilisez l'opération coalesce ()

Utilisez une opération .coalesce () Apache Spark pour réduire le nombre de partitions de sortie Spark avant d'écrire dans Amazon S3. Cela permet de réduire le nombre de fichiers de sortie. Gardez à l'esprit les points suivants :

  • L'opération coalesce () procède à des remaniements de données Spark, ce qui peut considérablement augmenter le temps d'exécution de la tâche.
  • Si vous spécifiez un petit nombre de partitions, la tâche peut échouer. Par exemple, si vous exécutez coalesce (1), Spark essaie de placer toutes les données dans une seule partition. Cela peut entraîner des problèmes d'espace disque.

Remarque : vous pouvez également utiliser l'opération repartition () pour réduire le nombre de partitions. La fonction repartition () remanie toutefois toutes les données. L'opération coalesce () utilise les partitions existantes pour réduire la quantité de remaniements de données.

Pour diminuer le nombre de partitions Spark à l'aide de l'opération .coalesce () :

1.    Vérifiez le nombre actuel de partitions :

dynamic_frame.getNumPartitions()

2.    Exécutez coalesce (). Exemple :

dynamic_frame_with_less_partitions=dynamic_frame.coalesce(20)

Cet article vous a-t-il été utile ?

Cette page peut-elle être améliorée ?


Vous avez besoin d’aide ?