Suivi des données traitées à l'aide de signets de tâche - 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.

Suivi des données traitées à l'aide de signets de tâche

AWS Glue effectue le suivi des données qui ont déjà été traitées au cours d'une exécution précédente d'une tâche ETL par la persistance des informations d'état à partir de l'exécution de la tâche. Ces informations d'état permanentes sont appelées marque-pages de tâches. Les signes de tâche permettent à AWS Glue de conserver des informations d'état et d'empêcher le retraitement des anciennes données. Avec les marque-pages de tâche, vous pouvez traiter de nouvelles données lors de la réexécution sur un intervalle planifié. Un marque-page de tâche se compose des états des différents éléments de tâches, tels que les sources, les transformations et les cibles. Par exemple, votre tâche ETL peut lire de nouvelles partitions dans un fichier Amazon S3. AWS Glue suit les partitions qui ont été traitées avec succès par la tâche pour éviter le traitement des doublons et les doublons dupliqués dans le magasin de données cible de la tâche.

Les marque-pages de tâche sont implémentés pour les sources de données JDBC, la transformation Relationalize et certaines sources Amazon Simple Storage Service (Amazon S3). Le tableau suivant répertorie les formats source Amazon S3 pris en charge par AWS Glue pour les marque-pages de tâche.

Version AWS Glue Formats source Amazon S3
Version 0.9 JSON, CSV, Apache Avro, XML
Version 1.0 et ultérieure JSON, CSV, Apache Avro, XML, Parquet, ORC

Pour plus d'informations sur les versions AWS Glue, veuillez consulter Définition des propriétés des tâches Spark.

La fonction de signets de tâches comporte des fonctionnalités supplémentaires lorsqu'elle est accessible via des scripts AWS Glue. Lorsque vous parcourez le script que vous avez généré, vous pouvez voir des contextes de transformation liés à cette fonctionnalité. Pour de plus amples informations, veuillez consulter Utilisation des marque-pages de tâche.

Utilisation des marque-pages de tâche dans AWS Glue

L’option de marque-page de tâche est transmise sous forme de paramètre au démarrage de la tâche. Le tableau suivant décrit les options de définition des marque-pages de tâche sur la console AWS Glue.

Marque-page de tâche Description
Enable La tâche met à jour l'état après une exécution pour suivre les données traitées précédemment. Si votre tâche a une source avec prise en charge du marque-page de tâche, elle suit les données traitées et, lorsqu'une tâche est exécutée, elle traite les nouvelles données depuis le dernier point de contrôle.
Désactiver Les marque-pages de tâche ne sont pas utilisés et la tâche traite toujours la totalité du jeu de données. Vous êtes responsable de la gestion de la sortie des exécutions de tâche précédentes. Il s'agit de l'option par défaut.
Pause

Traitez les données progressives depuis la dernière exécution réussie ou les données de la plage identifiée par les sous-options suivantes, sans mettre à jour l'état du dernier marque-page. Vous êtes responsable de la gestion de la sortie des exécutions de tâche précédentes. Les deux sous-options sont les suivantes :

  • job-bookmark-from <from-value> est l'ID d'exécution qui représente toute l'entrée qui a été traitée jusqu'à la dernière exécution réussie jusqu’à l'ID d'exécution spécifié (compris). L'entrée correspondante est ignorée.

  • job-bookmark-to <to-value> est l'ID d'exécution qui représente toute l'entrée qui a été traitée jusqu'à la dernière exécution réussie jusqu’à l'ID d'exécution spécifié ((compris). L'entrée correspondante, à l'exclusion de l'entrée identifiée par <from-value>, est traitée par la tâche. Toute entrée postérieure à cette entrée est également exclue pour traitement.

L'état du marque-page de tâche n'est pas mis à jour lorsque ce jeu d'options est spécifié.

Les sous-options sont facultatives, mais lorsqu'elles sont utilisées, les deux sous-options doivent être fournies.

Pour plus d'informations sur les paramètres transmis à une tâche sur la ligne de commande, et plus particulièrement pour les marque-pages de tâche, consultez Utilisation des paramètres des tâches dans les tâches AWS Glue.

Pour les sources d'entrée Amazon S3, les marque-pages de tâche de AWS Glue vérifient l'heure de la dernière modification des objets afin de contrôler quels objets doivent être retraités. Si les données de la source d'entrée ont été modifiées depuis votre dernière exécution de tâche, les fichiers sont traités de nouveau lorsque vous exécutez la tâche à nouveau.

Pour les sources JDBC, les règles suivantes s'appliquent :

  • Pour chaque table, AWS Glue utilise une ou plusieurs colonnes comme clés de marque-page pour déterminer les données nouvelles et les données traitées. Les touches de marque-page se combinent pour former une seule clé composée.

  • AWS Glue utilise par défaut la clé primaire comme clé de signet, à condition qu'elle augmente ou diminue de manière séquentielle (sans aucun écart).

  • Vous pouvez spécifier les colonnes à utiliser comme clés de signet dans votre script AWS Glue. Pour de plus amples informations sur l'utilisation de signets de tâches dans les scripts AWS Glue, consultez Utilisation des marque-pages de tâche.

  • AWS Glue ne prend pas en charge l'utilisation de colonnes dont les noms sont sensibles à la casse comme clés de signet de tâche.

Vous pouvez restaurer les marque-pages de tâche pour les tâches AWS Glue Spark ETL sur une exécution de tâche précédente. Les opérations de remplacement automatique de données sont mieux prises en charge : quand un marque-page de tâche déjà exécutée est restauré sur une exécution de tâche précédente, les exécutions de tâche ultérieures ne retraitent que les données à partir de l'exécution de tâche marquée par le marque-page.

Si vous avez l'intention de retraiter toutes les données à l'aide de la même tâche, réinitialisez le marque-page de tâche. Pour réinitialiser l'état d'un marque-page de tâche, utilisez la console AWS Glue, l'opération d'API ResetJobBookmark action (Python : reset_job_bookmark) ou le AWS CLI. Par exemple, entrez la commande suivante à l'aide de l'AWS CLI :

aws glue reset-job-bookmark --job-name my-job-name

Lorsque vous restaurez ou réinitialisez un marque-page, AWS Glue ne nettoie pas les fichiers cible, car il peut y avoir plusieurs cibles et les cibles ne sont pas suivies avec des marque-pages de tâche. Seuls les fichiers source sont suivis à l'aide de marque-pages de tâche. Vous pouvez créer différentes cibles de sortie lors de la restauration et du retraitement des fichiers source pour éviter les doublons de données dans votre sortie.

AWS Glue assure le suivi des marque-pages de tâche par tâche. Si vous supprimez une tâche, le marque-page de tâche est supprimé.

Dans certains cas, il se peut que vous ayez activé les marque-pages de tâche AWS Glue, mais que votre tâche ETL retraite les données qui ont déjà été traitées lors d'une exécution précédente. Pour plus d'informations sur la résolution des causes courantes de cette erreur, consultez Résolution des erreurs Erreurs Spark.

Détails opérationnels de la fonctionnalité de signets de tâche

Cette section décrit plus de détails opérationnels sur l'utilisation des marque-pages de tâche.

Les marque-pages de tâche stockent les états d'une tâche. Chaque instance de l'état est identifiée par un nom et un numéro de version. Lorsqu'un script appelle job.init, il extrait son état et obtient toujours la dernière version. Au sein d'un état, il y a plusieurs éléments d'état, qui sont spécifiques à chaque source, la transformation et l'instance de récepteur dans le script. Ces éléments d'état sont identifiés par un contexte de transformation qui est attaché à l'élément correspondant (source, transformation ou récepteur) dans le script. Les éléments d'état sont enregistrés de manière atomique lorsque job.commit est appelé depuis le script utilisateur. Le script obtient le nom de la tâche et l'option de contrôle pour les marque-pages de tâches depuis les arguments.

Les éléments d'état dans le marque-page de tâche sont les données de la source, de la transformation ou des données spécifiques au récepteur. Par exemple, supposons que vous souhaitiez lire des données progressives à partir d'un emplacement Amazon S3 qui est constamment écrit par une tâche ou un processus en amont. Dans ce cas, le script doit déterminer ce qui a été traité jusqu'à présent. L'implémentation du marque-page de tâche pour la source Amazon S3 enregistre des informations pour que, lors de la prochaine exécution de la tâche, elle puisse filtrer uniquement les nouveaux objets à l'aide des informations enregistrées et recalculer l'état de la prochaine exécution de la tâche. Un horodatage est utilisé pour filtrer les nouveaux fichiers.

Outre les éléments d'état, les marque-pages de tâche ont un nombre d'exécutions, un nombre de tentatives et un numéro de version. Le nombre d'exécutions suit l'exécution de la tâche et le nombre de tentatives enregistre les tentatives d'une exécution de tâche. Le nombre d'exécutions d'une tâche est un nombre croissant de façon monotone incrémenté pour chaque exécution réussie. Le nombre de tentatives suit les tentatives de chaque exécution, et il est incrémenté uniquement lorsqu'il y a une exécution après une tentative en échec. Le numéro de version augmente de façon monotone et effectue le suivi des mises à jour d'un marque-page de tâche.

Dans la base de données de service AWS Glue, les états des marque-pages de toutes les transformations sont stockés ensemble sous forme de paires valeur clé :

{ "job_name" : ..., "run_id": ..., "run_number": .., "attempt_number": ... "states": { "transformation_ctx1" : { bookmark_state1 }, "transformation_ctx2" : { bookmark_state2 } } }
Bonnes pratiques

Les bonnes pratiques suivantes sont recommandées pour utiliser des signets de tâche.

  • Ne modifiez pas la propriété de la source de données lorsque le marque-page est activé. Par exemple, une source de données 0 pointe vers un chemin d'entrée A Amazon S3, et la tâche est en cours de lecture à partir d'une source exécutée pendant plusieurs tours avec le marque-page activé. Si vous modifiez le chemin d'entrée de source de données 0 en chemin B Amazon S3 sans modifier le paramètre transformation_ctx, la tâche AWS Glue utilisera l'ancien état de marque-page enregistré. Cela entraînera des fichiers manquants ou ignorés dans le chemin d'entrée B comme AWS Glue supposerait que ces fichiers ont été traités lors d'exécutions précédentes.

  • Utiliser un tableau de catalogue avec des marque-pages pour une meilleure gestion des partitions. Les marque-pages fonctionnent à la fois pour les sources de données du catalogue de données ou à partir d'options. Cependant, il est difficile de supprimer/ajouter de nouvelles partitions avec l'approche « à partir d'options ». L'utilisation d'un tableau de catalogue avec des crawlers peut fournir une meilleure automatisation pour suivre les partitions nouvellement ajoutées et vous offre la flexibilité nécessaire pour sélectionner des partitions particulières avec un prédicat pushdown.

  • Utiliser le listeur de fichiers Amazon S3 AWS Glue pour les jeux de données volumineux. Un marque-page répertorie tous les fichiers sous chaque partition d'entrée et effectue le filtrage. Par conséquent, s'il y a trop de fichiers sous une seule partition, le marque-page peut être exécuté dans le pilote OOM. Utiliser le listeur de fichiers Amazon S3 AWS Glue pour éviter de répertorier tous les fichiers en mémoire en même temps.