

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.

# AWS Glue Spark et PySpark jobs
<a name="spark_and_pyspark"></a>

AWS Glue soutenez Spark et PySpark jobs. Une tâche Spark est exécutée dans un environnement Apache Spark géré par AWS Glue. Elle traite les données par lots. Une tâche ETL en streaming est similaire à une tâche Spark, sauf qu'elle exécute ETL sur des flux de données. Elle utilise le cadre Apache Spark Structured Streaming. Certaines fonctionnalités de tâche Spark ne sont pas disponibles pour les tâches ETL en streaming.

Les sections suivantes fournissent des informations sur AWS Glue Spark et les PySpark jobs.

**Topics**
+ [Configuration des propriétés des tâches pour les tâches Spark dans AWS Glue](add-job.md)
+ [Modification de scripts Spark dans la consoleAWS Glue](edit-script-spark.md)
+ [Tâches (hérité)](console-edit-script.md)
+ [Suivi des données traitées à l'aide de signets de tâche](monitor-continuations.md)
+ [Stockage des données réorganisées Spark](monitor-spark-shuffle-manager.md)
+ [Surveillance des tâches Spark AWS Glue](monitor-spark.md)
+ [Résolution des problèmes liés à l'IA générative pour Apache Spark in AWS Glue](troubleshoot-spark.md)
+ [Utilisation de vues matérialisées avec Glue AWS](materialized-views.md)

# Configuration des propriétés des tâches pour les tâches Spark dans AWS Glue
<a name="add-job"></a>

Lorsque vous définissez votre tâche sur la AWS Glue console, vous fournissez des valeurs pour les propriétés permettant de contrôler l'environnement AWS Glue d'exécution. 

## Définition des propriétés des tâches Spark
<a name="create-job"></a>

La liste suivante contient les propriétés d’une tâche Spark. Pour les propriétés d’une tâche shell Python, consultez [Définition des propriétés pour les tâches shell Python](add-job-python.md#create-job-python-properties). Pour les propriétés d’une tâche ETL en streaming, consultez [Définition des propriétés de tâche pour une tâche ETL en streaming](add-job-streaming.md#create-job-streaming-properties).

Les propriétés sont répertoriées dans l'ordre dans lequel elles apparaissent dans l'assistant **d'ajout d'une tâche** sur AWS Glue la console.

**Nom**  
Fournit une chaîne UTF-8 d’une longueur maximale de 255 caractères 

**Description**  
Fournissez une description facultative de 2 048 caractères maximum. 

**Rôle IAM**  
Spécifiez le rôle IAM qui permet de définir les autorisations d’accès aux ressources utilisées pour exécuter la tâche et accéder aux magasins de données. Pour plus d'informations sur les autorisations relatives à l'exécution de tâches dans AWS Glue, consultez[Gestion des identités et des accès pour AWS Glue](security-iam.md).

**Type**  
Le type de tâche ETL. Ce paramètre est défini automatiquement en fonction du type de sources de données que vous sélectionnez.  
+ **Spark** exécute un script ETL Apache Spark avec la commande de tâche `glueetl`.
+ **Spark Streaming** exécute un script ETL Apache Spark en streaming avec la commande de tâche `gluestreaming`. Pour de plus amples informations, veuillez consulter [Tâches ETL en streaming dans AWS Glue](add-job-streaming.md).
+ **Python shell** (shell Python) exécute un script Python avec la commande de tâche `pythonshell`. Pour de plus amples informations, veuillez consulter [Configuration des propriétés pour les tâches shell Python dans AWS Glue](add-job-python.md).

**Version AWS Glue **  
AWS Glue version détermine les versions d'Apache Spark et de Python disponibles pour la tâche, comme indiqué dans le tableau suivant.      
<a name="table-glue-versions"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/add-job.html)

**Language**  
Le code inclus dans le script ETL permet de définir la logique de votre tâche. Le script peut être codé dans Python ou dans Scala. Vous pouvez choisir si le script exécuté par le job est généré par vous AWS Glue ou fourni par vous. 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 l’écriture de scripts, consultez [AWS Glue guide de programmation](edit-script.md).

**Type d’employé**  
Les types d’employé suivantes sont disponibles :  
Les ressources disponibles pour les AWS Glue travailleurs sont mesurées en DPUs. Un DPU est une mesure relative de la puissance de traitement composée de 4 V de capacité CPUs de calcul et de 16 Go de mémoire.  
+ **G.025X** – Lorsque vous choisissez ce type, vous devez également fournir une valeur pour **Number of workers (Nombre d'employés)**. Chaque utilisateur est mappé sur 0,25 DPU (2 VCPUs, 4 Go de mémoire) avec un disque de 84 Go (environ 34 Go libres). Nous recommandons ce type d’employé pour les travaux de streaming à faible volume. Ce type de travailleur n'est disponible que pour les tâches de streaming en AWS Glue version 3.0 ou ultérieure.
+ **G.1X** – Lorsque vous choisissez ce type, vous devez également fournir une valeur pour **Number of workers (Nombre d'employés)**. Chaque utilisateur est mappé sur 1 DPU (4 VCPUs, 16 Go de mémoire) avec un disque de 94 Go (environ 44 Go libres). Nous recommandons ce type de travailleur pour les charges de travail telles que les transformations de données, les jointures et les requêtes, afin de proposer un moyen évolutif et rentable d'exécuter la plupart des tâches.
+ **G.2X** – Lorsque vous choisissez ce type, vous devez également fournir une valeur pour **Number of workers (Nombre d'employés)**. Chaque utilisateur mappe sur 2 processeurs (8 VCPUs, 32 Go de mémoire) avec un disque de 138 Go (environ 78 Go libres). Nous recommandons ce type de travailleur pour les charges de travail telles que les transformations de données, les jointures et les requêtes, afin de proposer un moyen évolutif et rentable d'exécuter la plupart des tâches.
+ **G.4X** – Lorsque vous choisissez ce type, vous devez également fournir une valeur pour **Number of workers (Nombre d'employés)**. Chaque utilisateur mappe sur 4 processeurs (16 VCPUs, 64 Go de mémoire) avec un disque de 256 Go (environ 230 Go libres). Nous recommandons ce type de travailleur pour les tâches dont les charges de travail contiennent les transformations, les agrégations, les jointures et les requêtes les plus exigeantes. 
+ **G.8X** – Lorsque vous choisissez ce type, vous devez également fournir une valeur pour **Number of workers (Nombre d'employés)**. Chaque utilisateur mappe sur 8 DPU (32 VCPUs, 128 Go de mémoire) avec un disque de 512 Go (environ 485 Go libres). Nous recommandons ce type de travailleur pour les tâches dont les charges de travail contiennent les transformations, les agrégations, les jointures et les requêtes les plus exigeantes.
+ **G.12X** – Lorsque vous choisissez ce type, vous devez également fournir une valeur pour **Number of workers (Nombre d'employés)**. Chaque utilisateur mappe sur 12 DPU (48 VCPUs, 192 Go de mémoire) sur un disque de 768 Go (environ 741 Go libres). Nous recommandons ce type de travailleur pour les tâches comportant des charges de travail très importantes et gourmandes en ressources qui nécessitent une capacité de calcul importante. 
+ **G.16X** – Lorsque vous choisissez ce type, vous devez également fournir une valeur pour **Number of workers (Nombre d'employés)**. Chaque utilisateur mappe sur 16 DPU (64 VCPUs, 256 Go de mémoire) avec un disque de 1024 Go (environ 996 Go libres). Nous recommandons ce type de travailleur pour les tâches comportant les charges de travail les plus importantes et les plus gourmandes en ressources et qui nécessitent une capacité de calcul maximale. 
+ **R.1X** – Lorsque vous choisissez ce type, vous devez également fournir une valeur pour **Number of workers (Nombre d'employés)**. Chaque travailleur mappe vers 1 DPU avec une configuration optimisée pour la mémoire. Nous recommandons ce type de programme de travail pour les charges de travail gourmandes en mémoire qui rencontrent fréquemment des out-of-memory erreurs ou nécessitent des ratios élevés. memory-to-CPU 
+ **R.2X** – Lorsque vous choisissez ce type, vous devez également fournir une valeur pour **Number of workers (Nombre d'employés)**. Chaque travailleur mappe vers 2 DPU avec une configuration optimisée pour la mémoire. Nous recommandons ce type de programme de travail pour les charges de travail gourmandes en mémoire qui rencontrent fréquemment des out-of-memory erreurs ou nécessitent des ratios élevés. memory-to-CPU 
+ **R.4X** – Lorsque vous choisissez ce type, vous devez également fournir une valeur pour **Number of workers (Nombre d'employés)**. Chaque travailleur mappe vers 4 DPU avec une configuration optimisée pour la mémoire. Nous recommandons ce type de programme de travail pour les charges de travail gourmandes en mémoire qui rencontrent fréquemment des out-of-memory erreurs ou nécessitent des ratios élevés. memory-to-CPU 
+ **R.8X** – Lorsque vous choisissez ce type, vous devez également fournir une valeur pour **Number of workers (Nombre d'employés)**. Chaque travailleur mappe vers 8 DPU avec une configuration optimisée pour la mémoire. Nous recommandons ce type de programme de travail pour les charges de travail gourmandes en mémoire très volumineuses qui rencontrent fréquemment des out-of-memory erreurs ou nécessitent des ratios élevés. memory-to-CPU 
**Spécifications des types de travailleurs**  
La table suivante fournit des spécifications détaillées pour tous les types de travailleurs G disponibles :    
**Spécifications du type de travailleur G**    
<a name="table-worker-specifications"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/add-job.html)
**Important :** les types de travailleurs G.12X et G.16X, ainsi que tous les types de travailleurs R (R.1X à R.8X), ont une latence de démarrage plus élevée.  
Un taux horaire vous est facturé en fonction du nombre de tâches DPUs utilisées pour exécuter vos tâches ETL. Pour plus d'informations, consultez la page de tarification [AWS Glue](https://aws.amazon.com/glue/pricing/).  
Pour les tâches de AWS Glue version 1.0 ou antérieures, lorsque vous configurez une tâche à l'aide de la console et que vous spécifiez un **type de travailleur** **Standard**, la **capacité maximale** est définie et le **nombre de travailleurs** devient la valeur de **Capacité maximale** - 1. Si vous utilisez le AWS Command Line Interface (AWS CLI) ou le AWS SDK, vous pouvez spécifier le paramètre **Capacité maximale**, ou vous pouvez spécifier à la fois le **type de travailleur** et le **nombre de travailleurs**.  
Pour les tâches de AWS Glue la version 2.0 ou ultérieure, vous ne pouvez pas spécifier de **capacité maximale**. Au lieu de cela, vous devez spécifier le **Worker type (Type d’employé)** et le **Number of workers (Nombre d’employés)**.  
**G.4X**et les types de **G.8X** travailleurs ne sont disponibles que pour les tâches Spark ETL AWS Glue version 3.0 ou ultérieure dans les AWS régions suivantes : USA Est (Ohio), USA Est (Virginie du Nord), USA Ouest (Californie du Nord), USA Ouest (Oregon), Asie-Pacifique (Mumbai), Asie-Pacifique (Séoul), Asie-Pacifique (Sydney), Asie-Pacifique (Tokyo), Canada (Centre), Europe (Francfort), Europe (Irlande), Europe (Londres), Europe (Espagne), Europe (Stockholm) et Amérique du Sud (São Paulo).  
**G.12X****G.16X**, et les types de **R.8X** travailleurs **R.1X** intermédiaires ne sont disponibles que pour les jobs Spark ETL AWS Glue version 4.0 ou ultérieure dans les AWS régions suivantes : USA Est (Virginie du Nord), USA Ouest (Oregon), USA Est (Ohio), Europe (Irlande) et Europe (Francfort). D’autres régions seront prises en charge dans les prochaines versions.

**Nombre de travailleurs demandé**  
Pour la plupart des types d’employés, vous devez spécifier le nombre de travailleurs qui sont alloués lors de l’exécution de la tâche. 

**Marque-page de tâche**  
Spécifiez la manière dont AWS Glue les informations d'état sont traitées lors de l'exécution de la tâche. Ce signet peut se souvenir des données traitées précédemment, mettre à jour les informations sur l’état ou ignorer les informations sur l’état. Pour de plus amples informations, veuillez consulter [Suivi des données traitées à l'aide de signets de tâche](monitor-continuations.md).

**Mise en file d’attente des tâches**  
Spécifie si les exécutions de tâches sont mises en file d’attente pour être exécutées ultérieurement lorsqu’elles ne peuvent pas être exécutées immédiatement en raison de Service Quotas.  
Lorsque cette case est cochée, la mise en file d’attente des tâches est activée pour les exécutions de tâches. Si cette option n’est pas cochée, les exécutions de tâches ne seront pas prises en compte pour la mise en file d’attente.  
Si ce paramètre ne correspond pas à la valeur définie dans l’exécution de la tâche, la valeur du champ d’exécution de la tâche sera utilisée.

**Exécution flexible**  
Lorsque vous configurez une tâche à l'aide de AWS Studio ou de l'API, vous pouvez spécifier une classe d'exécution de tâche standard ou flexible. Vos tâches peuvent avoir différents degrés de priorité et de sensibilité au temps. La classe d’exécution standard est idéale pour les charges de travail urgentes qui nécessitent un démarrage rapide des tâches et des ressources dédiées.  
La classe d’exécution flexible convient aux tâches non urgentes telles que les tâches de pré-production, les tests et les chargements de données uniques. Les exécutions flexibles sont prises en charge pour les tâches utilisant AWS Glue la version 3.0 ou ultérieure et/ou les `G.1X` types de `G.2X` travailleurs. Les nouveaux types de travailleurs (`G.12X`, `G.16X` et `R.1X` à `R.8X`) ne permettent pas une exécution flexible.  

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/FnHCoTuDLXU/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/FnHCoTuDLXU)

Les exécutions de tâches flexibles sont facturées en fonction du nombre de travailleurs en cours d’exécution à un moment donné dans le temps. Le nombre de travailleurs peut être ajouté ou supprimé pour une exécution flexible en cours d’exécution. Au lieu de facturer comme un simple calcul de `Max Capacity` \$1 `Execution Time`, chaque travailleur contribuera pour le temps qu’il a effectué pendant l’exécution du travail. La facture est la somme de (`Number of DPUs per worker` \$1 `time each worker ran`).  
Pour plus d'informations, consultez le panneau d'aide de AWS Studio, ou [Tâches](aws-glue-api-jobs-job.md) et[Exécutions de tâches](aws-glue-api-jobs-runs.md).

**Nombre de nouvelles tentatives**  
Spécifiez le nombre de fois, de 0 à 10, qui AWS Glue devrait redémarrer automatiquement la tâche en cas d'échec. Les tâches qui atteignent la limite de délai d’expiration ne sont pas redémarrées.

**Délai d'expiration de la tâche**  
Définit le délai d’exécution maximal en minutes. La valeur maximale est de 7 jours ou 10 080 minutes. Dans le cas contraire, les tâches déclencheront une exception.  
Si aucune valeur n’est indiquée, le délai d’expiration est défini par défaut sur 2 880 minutes.  
Toutes les AWS Glue tâches existantes dont le délai d'expiration est supérieur à 7 jours seront définies par défaut sur 7 jours. Par exemple, si vous avez spécifié un délai d’expiration de 20 jours pour un traitement par lots, celui-ci sera arrêté le 7e jour.  
**Bonnes pratiques relatives aux délais d’expiration des tâches**  
Les tâches sont facturées en fonction du temps d’exécution. Pour éviter des frais inattendus, configurez des délais d’expiration adaptés à la durée d’exécution prévue de votre tâche. 

**Propriétés avancées**    
**Nom du fichier de script**  
Un nom de script unique pour votre tâche. Il ne peut pas être nommé **Tâche sans titre**.  
**Chemin d’accès au script**  
L’emplacement Amazon S3 du script. Le chemin doit être de la forme `s3://bucket/prefix/path/`. Il doit se terminer par une barre oblique (`/`) et ne pas inclure de fichiers.  
**Métriques de tâche**  
Activez ou désactivez la création de CloudWatch métriques Amazon lors de l'exécution de cette tâche. Pour afficher les données de profilage, vous devez activer cette option. Pour en savoir plus sur l’activation et la visualisation de métriques, consultez [Surveillance et débogage des tâches](monitor-profile-glue-job-cloudwatch-metrics.md).   
**Métriques d’observabilité de la tâche**  
Activez la création de CloudWatch mesures d'observabilité supplémentaires lors de l'exécution de cette tâche. Pour de plus amples informations, veuillez consulter [Surveillance à l'aide de métriques d'observabilité AWS Glue](monitor-observability.md).  
**Journalisation continue**  
Activez la journalisation continue sur Amazon CloudWatch. Si cette option n’est pas activée, les journaux ne sont disponibles qu’une fois la tâche terminée. Pour en savoir plus, consultez [Journalisation pour les AWS Glue emplois](monitor-continuous-logging.md).  
**Interface utilisateur Spark**  
Permettez l’utilisation de l’interface utilisateur Spark pour la surveillance de cette tâche. Pour de plus amples informations, veuillez consulter [Activation de l’interface utilisateur web Apache Spark pour les tâches AWS Glue](monitor-spark-ui-jobs.md).   
**Chemin d’accès aux journaux de l’interface utilisateur Spark**  
Le chemin pour écrire les journaux lorsque l’interface utilisateur Spark est activée.  
**Configuration de journalisation et de surveillance de l’interface utilisateur Spark**  
Choisissez l’une des options suivantes :  
+ *Standard* : écrivez des journaux en utilisant l'ID AWS Glue d'exécution du job comme nom de fichier. Activez la surveillance de l'interface utilisateur Spark dans la AWS Glue console.
+ *Hérité* : écrivez des journaux en utilisant « spark-application-\$1timestamp\$1 » comme nom de fichier. N’activez pas la surveillance de l’interface utilisateur Spark.
+ *Standard et hérité* : écrivez des journaux à la fois dans les emplacements standard et hérités. Activez la surveillance de l'interface utilisateur Spark dans la AWS Glue console.  
**Simultanéité maximum**  
Définit le nombre maximal d’exécutions simultanées autorisées pour cette tâche. La valeur par défaut est 1. Une erreur est renvoyée lorsque ce seuil est atteint. La valeur maximale que vous pouvez spécifier est contrôlée par une limite de service. Par exemple, si une tâche est toujours en cours d’exécution lorsqu’une nouvelle instance est lancée, vous pouvez souhaiter le renvoi d’une erreur pour empêcher deux instances de la même tâche de s’exécuter simultanément.   
**Chemin d’accès temporaire**  
Indiquez l'emplacement d'un répertoire de travail dans Amazon S3 où les résultats intermédiaires temporaires sont écrits lors de l' AWS Glue exécution du script. Vérifiez qu’il n’existe pas de fichier portant le même nom que le répertoire temporaire dans le chemin d’accès. Ce répertoire est utilisé lors des opérations de AWS Glue lecture et d'écriture sur Amazon Redshift et lors de certaines AWS Glue transformations.  
AWS Glue crée un compartiment temporaire pour les tâches s'il n'en existe pas déjà un dans une région. Ce compartiment peut permettre l’accès au public. Vous pouvez soit modifier le compartiment dans Amazon S3 pour définir le bloc d’accès public, soit supprimer le compartiment ultérieurement une fois toutes les tâches de cette région terminées.  
**Seuil de notification de délai (minutes)**  
Définit le seuil (en minutes) avant l’envoi d’une notification de dépassement de délai. Vous pouvez définir ce seuil pour envoyer des notifications lorsqu’une exécution de tâche `RUNNING`, `STARTING` ou `STOPPING` prend plus de temps que le nombre de minutes prévu.  
**Configuration de sécurité**  
Choisissez une configuration de sécurité dans la liste. Une configuration de sécurité spécifie la manière dont les données de la cible Amazon S3 sont chiffrées : pas de chiffrement, chiffrement côté serveur avec des clés gérées par AWS KMS(SSE-KMS) ou clés de chiffrement gérées par Amazon S3 (SSE-S3).  
**Chiffrement côté serveur**  
Si vous sélectionnez cette option, lorsque la tâche ETL écrit sur Amazon S3, les données sont chiffrées au repos à l’aide du chiffrement SSE-S3. Votre cible de données Amazon S3 et toutes les données qui sont écrites dans un répertoire temporaire Amazon S3 sont chiffrées. Cette option est transmise en tant que paramètre de tâche. Pour en savoir plus, consultez la section [Protecting Data Using Server-Side Encryption with Amazon S3-Managed Encryption Keys (SSE-S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingServerSideEncryption.html) (Protection des données à l’aide du chiffrement côté serveur avec des clés de chiffrement (SSE-S3) gérées par Amazon S3) dans le *guide de l’utilisateur Amazon Simple Storage Service*.  
Cette option est ignorée si une configuration de sécurité est spécifiée.  
**Utiliser le catalogue de données Glue en tant que metastore Hive**  
Sélectionnez cette option pour utiliser le catalogue de AWS Glue données comme métastore Hive. Le rôle IAM utilisé pour la tâche doit disposer de l’autorisation `glue:CreateDatabase`. Une base de données appelée « default » est créée dans le catalogue de données si elle n’existe pas.

**Connexions**  
Choisissez une configuration VPC pour accéder aux sources de données Amazon S3 situées dans votre cloud privé virtuel (VPC). Vous pouvez créer et gérer une connexion réseau dans AWS Glue. Pour de plus amples informations, veuillez consulter [Connexion aux données](glue-connections.md). 

**Bibliothèques**    
**Chemin de bibliothèque Python, JARs chemin dépendant et chemin des fichiers référencés**  
Spécifiez ces options si votre script les requiert. Vous pouvez définir des chemins Amazon S3 séparés par des virgules pour ces options lorsque vous définissez la tâche. Vous pouvez remplacer ces chemins lorsque vous exécutez la tâche. Pour de plus amples informations, veuillez consulter [Fournir vos propres scripts personnalisés](console-custom-created.md).  
**Paramètres du job**  
Ensemble de paires clé-valeur transmises sous forme de paramètres nommés au script. Il s’agit de valeurs par défaut qui sont utilisées lors de l’exécution du script, mais vous pouvez les remplacer dans les déclencheurs ou lorsque vous exécutez la tâche. Vous devez préfixer le nom de la clé avec `--` ; par exemple : `--myKey`. Vous transmettez les paramètres de la tâche sous forme de carte lorsque vous utilisez le AWS Command Line Interface.  
Pour accéder à des exemples, veuillez consulter les paramètres Python dans [Transmission de paramètres Python et accès à ces paramètres dans AWS Glue](aws-glue-programming-python-calling.md#aws-glue-programming-python-calling-parameters).  
**Étiquettes**  
Identifiez votre tâche avec une **clé d’identification** et avec une **valeur d’identification** facultative. Lorsque les clés d’identification sont créées, elles sont en lecture seule. Utilisez des identifications sur certaines ressources pour mieux les organiser et les identifier. Pour de plus amples informations, veuillez consulter [AWS tags dans AWS Glue](monitor-tags.md). 

## Restrictions pour les tâches qui accèdent aux tables gérées par Lake Formation
<a name="lf-table-restrictions"></a>

Tenez compte des remarques et restrictions suivantes lorsque vous créez des tâches qui permettent de lire ou d'écrire dans des tables gérées par AWS Lake Formation : 
+ Les fonctions suivantes ne sont pas prises en charge dans les tâches qui accèdent à des tables comportant des filtres au niveau des cellules :
  + [Marque-pages de tâche](https://docs.aws.amazon.com/glue/latest/dg/monitor-continuations.html) et [exécution limitée](https://docs.aws.amazon.com/glue/latest/dg/bounded-execution.html)
  + [Prédicats pushdown](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-partitions.html#aws-glue-programming-etl-partitions-pushdowns)
  + [Prédicats de partition de catalogue côté serveur](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-partitions.html#aws-glue-programming-etl-partitions-cat-predicates)
  + [enableUpdateCatalog](https://docs.aws.amazon.com/glue/latest/dg/update-from-job.html)

# Modification de scripts Spark dans la consoleAWS Glue
<a name="edit-script-spark"></a>

Un script contient le code qui extrait les données des sources, les transforme et les charge dans des cibles. AWS Glue exécute un script lorsqu'il démarre une tâche.

Les scripts ETL AWS Glue peuvent être codés en Python ou Scala. Les scripts Python utilisent un langage qui est une extension du dialecte PySpark Python pour les tâches d'extraction, de transformation et de chargement (ETL). Le script contient des *structures étendues* pour gérer les transformations ETL. Lorsque vous générez automatiquement la logique de code source pour votre tâche, un script est créé. Vous pouvez modifier ce script ou fournir votre propre script personnalisé pour effectuer votre travail ETL.

 Pour plus d'informations sur la définition et la modification de scripts dans AWS Glue, consultez [AWS Glue guide de programmation](edit-script.md).

## Bibliothèques ou fichiers supplémentaires
<a name="w2aac37c11c12c13b9"></a>

Si votre script nécessite des bibliothèques ou des fichiers supplémentaires, vous pouvez les spécifier comme suit :

**chemin de la bibliothèque Python**  
Chemins Amazon Simple Storage Service (Amazon S3) séparés par des virgules vers les bibliothèques Python requises par le script.  
Seules les bibliothèques Python pures peuvent être utilisées. Les bibliothèques reposant sur des extensions C, par exemple la bibliothèque d'analyse des données Python pandas, ne sont pas encore prises en charge.

**Chemin des fichiers jar dépendants**  
Chemins Amazon S3 séparés par des virgules vers les fichiers JAR requis par le script.  
À l'heure actuelle, seules les bibliothèques pures Java ou Scala (2.11) peuvent être utilisées.

**Chemin de fichiers référencés**  
Chemins Amazon S3 séparés par des virgules vers les fichiers supplémentaires (par exemple, des fichiers de configuration) requis par le script.

# Tâches (hérité)
<a name="console-edit-script"></a>

Un script contient le code qui permet d'effectuer un travail ETL (extraction, transformation et chargement). Vous pouvez fournir votre propre script, ou AWS Glue peut générer un script à partir de vos indications. Pour plus d'informations sur la création de vos propres scripts, consultez [Fournir vos propres scripts personnalisés](console-custom-created.md).

Vous pouvez modifier un script dans la console AWS Glue. Lorsque vous modifiez un script, vous pouvez ajouter des sources, des cibles et des transformations.

**Pour modifier un script**

1. Connectez-vous à la AWS Glue console AWS Management Console et ouvrez-la à l'adresse [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/). Ensuite, choisissez l'onglet **Jobs** (Tâches).

1. Choisissez une tâche dans la liste, puis choisissez **Action**, **Edit script** (Modifier le script) pour ouvrir l'éditeur de script.

   Vous pouvez également accéder à l'éditeur de script à partir de la page des détails de la tâche. Sélectionnez l’onglet **Script**, puis **Edit script** (Modifier le script).

   

## Éditeur de script
<a name="console-edit-script-editor"></a>

L'éditeur de script AWS Glue vous permet d'insérer, de modifier et de supprimer des sources, des cibles et des transformations dans votre script. L'éditeur de script affiche à la fois le script et un diagramme pour vous aider à visualiser le flux de données.

Pour créer un diagramme pour le script, choisissez **Générer un diagramme**. AWS Glue utilise des lignes d'annotation dans le script commençant par **\$1 \$1** pour afficher le schéma. Pour représenter correctement votre script dans le diagramme, vous devez conserver la synchronisation entre les paramètres dans les annotations et les paramètres dans le code Apache Spark.

L'éditeur de script vous permet d'ajouter des modèles de code à chaque fois que votre curseur est positionné dans le script. Dans la partie supérieure de l'éditeur, choisissez l'une des options suivantes :
+ Pour ajouter une table source au script, choisissez **Source** (Source).
+ Pour ajouter une table cible au script, choisissez **Target** (Cible).
+ Pour ajouter un emplacement cible au script, choisissez **Target location** (Emplacement cible).
+ Pour ajouter une transformation au script, choisissez **Transform** (Transformation). Pour plus d'informations sur les fonctions appelées dans votre script, consultez [Programmez les scripts ETL AWS Glue dans PySpark](aws-glue-programming-python.md).
+ Pour ajouter une transformation Spigot au script, choisissez **Spigot**.

Dans le code inséré, modifiez l'élément `parameters` dans les annotations et dans le code Apache Spark. Par exemple, si vous ajoutez une transformation **Spigot**, vérifiez que l'élément `path` est remplacé dans la ligne d'annotation `@args` et dans la ligne de code `output`.

L'onglet **Logs** (Journaux) présente les journaux associés à votre travail pendant son exécution. Les 1 000 lignes les plus récentes sont affichées.

L'onglet **Schema** (Schéma) présente le schéma des sources et des cibles sélectionnées, lorsqu'elles sont disponibles dans Data Catalog. 

# Suivi des données traitées à l'aide de signets de tâche
<a name="monitor-continuations"></a>

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 de l’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](add-job.md#create-job).

La fonction de signets de tâches comporte des fonctionnalités supplémentaires lorsqu'elle est accessible par le biais de AWS Glue scripts. 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](programming-etl-connect-bookmarks.md).

**Topics**
+ [Utilisation des marque-pages de tâche dans AWS Glue](#monitor-continuations-implement)
+ [Détails opérationnels de la fonctionnalité de signets de tâche](#monitor-continuations-script)

## Utilisation des marque-pages de tâche dans AWS Glue
<a name="monitor-continuations-implement"></a>

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 des résultats des précédentes exécutions de tâches. 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 des résultats des précédentes exécutions de tâches. Les deux sous-options sont les suivantes : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/monitor-continuations.html) 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](aws-glue-programming-etl-glue-arguments.md).

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 AWS Glue script. Pour plus d'informations sur l'utilisation des signets Job dans les AWS Glue scripts, consultez[Utilisation des marque-pages de tâche](programming-etl-connect-bookmarks.md).
+ 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\$1job\$1bookmark)](aws-glue-api-jobs-runs.md#aws-glue-api-jobs-runs-ResetJobBookmark) 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 de configuration courantes de Glue](glue-troubleshooting-errors.md).

## Détails opérationnels de la fonctionnalité de signets de tâche
<a name="monitor-continuations-script"></a>

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 AWS Glue service, les états des signets pour toutes les transformations sont stockés ensemble sous forme de paires clé-valeur :

```
{
  "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 remplacez le chemin d'entrée de datasource0 par le chemin B d'Amazon S3 sans le modifier`transformation_ctx`, la AWS Glue tâche utilisera l'ancien état des favoris enregistré. Cela entraînera l'absence ou l'omission de fichiers dans le chemin d'entrée B, comme cela 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 créer de remove/add nouvelles partitions avec l'approche des options from. L'utilisation d'un tableau de catalogue avec des crawlers peut fournir une meilleure automatisation pour suivre les [partitions](https://docs.aws.amazon.com/glue/latest/dg/tables-described.html#tables-partition) nouvellement ajoutées et vous offre la flexibilité nécessaire pour sélectionner des partitions particulières avec un [prédicat pushdown](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-partitions.html).
+ *Utiliser le [listeur de fichiers Amazon S3 AWS Glue](https://aws.amazon.com/premiumsupport/knowledge-center/glue-oom-java-heap-space-error/) 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. Utilisez le listeur de fichiers AWS Glue Amazon S3 pour éviter de répertorier tous les fichiers en mémoire en une seule fois.

# Stockage des données réorganisées Spark
<a name="monitor-spark-shuffle-manager"></a>

La réorganisation est une étape importante d'une tâche Spark chaque fois que les données sont réarrangées entre des partitions. Elle est nécessaire parce que de larges transformations telles que `join`, ` groupByKey`, `reduceByKey` et `repartition` ont besoin d'informations provenant d'autres partitions pour terminer le traitement. Spark rassemble les données requises de chaque partition et les combine dans une nouvelle partition. Lors d'une réorganisation, les données sont écrites sur le disque et transférées via le réseau. Par conséquent, l'opération de réorganisation est liée à la capacité du disque local. Spark émet une erreur `No space left on device` ou ` MetadataFetchFailedException` lorsqu'il n'y a pas assez d'espace disque sur le programme d'exécution et qu'il n'y a pas de récupération.

**Note**  
 AWS Glue Le plugin Spark shuffle avec Amazon S3 n'est pris en charge que pour les tâches AWS Glue ETL. 

**Solution**  
Avec AWS Glue, vous pouvez désormais utiliser Amazon S3 pour stocker des données de réorganisation Spark. Amazon S3 est un service de stockage d'objets qui offre une évolutivité, une disponibilité des données, une sécurité et des performances de pointe. Cette solution désagrège le calcul et le stockage pour vos tâches Spark, et offre une élasticité totale et un stockage économique de la réorganisation, ce qui vous permet d'exécuter vos applications les plus complexes de manière fiable.

![\[Spark workflow showing Map and Reduce stages using Amazon S3 for shuffle data storage.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/gs-s3-shuffle-diagram.png)


Nous introduisons un nouveau plug-in Cloud Shuffle Storage pour Apache Spark afin d'utiliser Amazon S3. Vous pouvez activer la réorganisation Amazon S3 pour exécuter vos tâches AWS Glue de manière fiable, sans échec, si elles sont liées par la capacité du disque local pour les opérations de réorganisation volumineuses. Dans certains cas, une réorganisation vers Amazon S3 est légèrement plus lente que vers un disque local (ou EBS) si vous avez un grand nombre de petites partitions ou de fichiers réorganisés écrits dans Amazon S3.

## Conditions préalables à l'utilisation du plug-in de stockage de réorganisation du cloud.
<a name="monitor-spark-shuffle-manager-prereqs"></a>

 Pour utiliser le plug-in de stockage Cloud Shuffle avec des tâches AWS Glue ETL, vous avez besoin des éléments suivants : 
+ Un compartiment Amazon S3 situé dans la même région que celle de votre exécution de tâche, pour stocker la réorganisation intermédiaire et les données déversées. Le préfixe Amazon S3 du stockage de réorganisation peut être spécifié avec `--conf spark.shuffle.glue.s3ShuffleBucket=s3://shuffle-bucket/prefix/`, comme dans l'exemple suivant :

  ```
  --conf spark.shuffle.glue.s3ShuffleBucket=s3://glue-shuffle-123456789-us-east-1/glue-shuffle-data/
  ```
+  Définissez les stratégies de cycle de vie du stockage Amazon S3 sur le *préfixe* (tel que `glue-shuffle-data`), car le gestionnaire de réorganisation ne nettoie pas les fichiers une fois la tâche terminée. La réorganisation intermédiaire et les données déversées doivent être supprimées une fois la tâche terminée. Les utilisateurs peuvent définir des stratégies de cycle de vie court pour le préfixe. Les instructions de configuration d'une stratégie de cycle de vie Amazon S3 sont disponibles dans la section [Configuration du cycle de vie d'un compartiment](https://docs.aws.amazon.com//AmazonS3/latest/userguide/how-to-set-lifecycle-configuration-intro.html) dans le Guide de l'utilisateur Amazon Simple Storage Service.

## Utilisation du gestionnaire de shuffle AWS Glue Spark depuis la console AWS
<a name="monitor-spark-shuffle-manager-using-console"></a>

Pour configurer le gestionnaire de shuffle AWS Glue Spark à l'aide de la AWS Glue console ou de AWS Glue Studio lors de la configuration d'une tâche : choisissez le paramètre de tâche **-- write-shuffle-files-to -s3** pour activer le shuffle Amazon S3 pour la tâche.

![\[Job parameters interface showing --write-shuffle-files- parameter and option to add more.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/gs-s3-shuffle.png)


## Utilisation du plug-in de réorganisation Spark AWS Glue
<a name="monitor-spark-shuffle-manager-using"></a>

Les paramètres de tâche suivants activent et affinent le gestionnaire de réorganisation AWS Glue. Ces paramètres étant des indicateurs, les valeurs fournies ne sont pas prises en compte.
+ `--write-shuffle-files-to-s3` : l'indicateur principal, qui active le gestionnaire de réorganisation AWS Glue Spark pour utiliser des compartiments Amazon S3 pour écrire et lire des données de réorganisation. Lorsque l'indicateur n'est pas spécifié, le gestionnaire de réorganisation n'est pas utilisé.
+ `--write-shuffle-spills-to-s3` – (Pris en charge uniquement dans AWS Glue version 2.0). Indicateur facultatif qui vous permet de décharger des fichiers de déversement dans des compartiments Amazon S3, pour une résilience supplémentaire de votre tâche Spark. Ceci n'est requis que pour les charges de travail volumineuses qui déversent beaucoup de données sur le disque. Lorsque l'indicateur n'est pas spécifié, aucun fichier de déversement intermédiaire n'est écrit.
+ ` --conf spark.shuffle.glue.s3ShuffleBucket=s3://<shuffle-bucket>` – autre indicateur facultatif spécifiant le compartiment Amazon S3 dans lequel vous écrivez les fichiers de réorganisation. Par défaut, `--TempDir` /shuffle-data. AWS Glue La version 3.0\$1 prend en charge l'écriture de fichiers shuffle dans plusieurs compartiments en spécifiant des compartiments avec un délimiteur par virgule, comme dans. `--conf spark.shuffle.glue.s3ShuffleBucket=s3://shuffle-bucket-1/prefix,s3://shuffle-bucket-2/prefix/` L'utilisation de plusieurs compartiments améliore les performances. 

Vous devez fournir des paramètres de configuration de sécurité pour activer le chiffrement au repos des données de réorganisation. Pour plus d’informations sur les configurations de sécurité, consultez [Configuration du chiffrement dans AWS Glue](set-up-encryption.md). AWS Glue prend en charge toutes les autres configurations de réorganisation fournies par Spark.

**Binaires logiciels pour le plug-in Cloud Shuffle Storage**  
Vous pouvez également télécharger les fichiers binaires du plug-in Cloud Shuffle Storage pour Apache Spark sous la licence Apache 2.0 et l'exécuter dans n'importe quel environnement Spark. Le nouveau plugin est compatible avec out-of-the Amazon S3 et peut également être facilement configuré pour utiliser d'autres formes de stockage dans le cloud, telles que [Google Cloud Storage et Microsoft Azure Blob Storage](https://github.com/aws-samples/aws-glue-samples/blob/master/docs/cloud-shuffle-plugin/README.md). Pour plus d'informations, consultez [Cloud Shuffle Storage Plugin for Apache Spark](https://docs.aws.amazon.com/glue/latest/dg/cloud-shuffle-storage-plugin.html) (Plug-in Cloud Shuffle Storage pour Apache Spark).

**Remarques et limitations**  
Ci-dessous des remarques ou limitations concernant le gestionnaire de réorganisation AWS Glue.
+  AWS Glue le gestionnaire de shuffle ne supprime pas automatiquement les fichiers de données de shuffle (temporaires) stockés dans votre compartiment Amazon S3 une fois la tâche terminée. Pour garantir la protection des données, suivez les instructions fournies dans [Conditions préalables à l'utilisation du plug-in de stockage de réorganisation du cloud.](#monitor-spark-shuffle-manager-prereqs) avant d'activer le plug-in Cloud Shuffle Storage. 
+ Vous pouvez utiliser cette fonction si vos données sont biaisées.

# Cloud Shuffle Storage Plugin pour Apache Spark
<a name="cloud-shuffle-storage-plugin"></a>

Cloud Shuffle Storage Plugin est un plug-in Apache Spark compatible avec l’[API `ShuffleDataIO`](https://github.com/apache/spark/blob/master/core/src/main/java/org/apache/spark/shuffle/api/ShuffleDataIO.java) qui permet de stocker des données aléatoires sur des systèmes de stockage cloud (tels qu’Amazon S3). Il vous permet de compléter ou de remplacer la capacité de stockage sur disque local pour les opérations de remaniement de grande envergure, généralement déclenchées par des transformations telles que `join``reduceByKey`, `groupByKey` et `repartition` dans vos applications Spark, réduisant ainsi les défaillances ou les price/performance dislocations fréquentes de vos tâches et pipelines d'analyse de données sans serveur.

**AWS Glue**  
Sur les versions 3.0 et 4.0 de AWS Glue, le plug-in est préinstallé et prêt à autoriser la lecture aléatoire dans Amazon S3 sans aucune étape supplémentaire. Pour plus d’informations, consultez [AWS Glue Spark shuffle plugin with Amazon S3](https://docs.aws.amazon.com/glue/latest/dg/monitor-spark-shuffle-manager.html) afin d’activer cette fonctionnalité pour vos applications Spark.

**Autres environnements Spark**  
Le plug-in exige que les configurations Spark suivantes soient définies sur d’autres environnements Spark :
+ `--conf spark.shuffle.sort.io.plugin.class=com.amazonaws.spark.shuffle.io.cloud.ChopperPlugin` : indique à Spark d’utiliser ce plug-in pour Shuffle IO.
+ `--conf spark.shuffle.storage.path=s3://bucket-name/shuffle-file-dir` : chemin de stockage de vos fichiers de lecture aléatoire.

**Note**  
Le plug-in remplace une classe principale de Spark. Par conséquent, le fichier jar du plug-in doit être chargé avant les fichiers jar de Spark. Pour ce faire, utilisez `userClassPathFirst` dans des environnements YARN sur site si le plug-in est utilisé hors de AWS Glue.

## Création d’une offre groupée du plug-in pour vos applications Spark
<a name="cloud-shuffle-storage-plugin-bundling"></a>

Vous pouvez intégrer le plug-in à vos applications et distributions Spark (versions 3.1 et supérieures) en ajoutant la dépendance du plug-in dans votre fichier `pom.xml` Maven, tout en développant vos applications Spark en local. Pour plus d’informations sur les versions du plug-in et de Spark, consultez [Versions du plug-in](#cloud-shuffle-storage-plugin-versions).

```
<repositories>
   ...
    <repository>
        <id>aws-glue-etl-artifacts</id>
        <url>https://aws-glue-etl-artifacts.s3.amazonaws.com/release/ </url>
    </repository>
</repositories>
...
<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>chopper-plugin</artifactId>
    <version>3.1-amzn-LATEST</version>
</dependency>
```

Vous pouvez également télécharger les fichiers binaires directement depuis les artefacts AWS Glue Maven et les inclure dans votre application Spark comme suit.

```
#!/bin/bash
sudo wget -v https://aws-glue-etl-artifacts.s3.amazonaws.com/release/com/amazonaws/chopper-plugin/3.1-amzn-LATEST/chopper-plugin-3.1-amzn-LATEST.jar -P /usr/lib/spark/jars/
```

Exemple d’utilisation de spark-submit

```
spark-submit --deploy-mode cluster \
--conf spark.shuffle.storage.s3.path=s3://<ShuffleBucket>/<shuffle-dir> \
--conf spark.driver.extraClassPath=<Path to plugin jar> \ 
--conf spark.executor.extraClassPath=<Path to plugin jar> \
--class <your test class name> s3://<ShuffleBucket>/<Your application jar> \
```

## Configurations facultatives
<a name="cloud-shuffle-storage-plugin-optional"></a>

Il s’agit de valeurs de configuration facultatives qui contrôlent le comportement de lecture aléatoire d’Amazon S3. 
+ `spark.shuffle.storage.s3.enableServerSideEncryption`: Enable/disable S3 SSE pour les fichiers shuffle et spill. La valeur par défaut est `true`.
+ `spark.shuffle.storage.s3.serverSideEncryption.algorithm` : algorithme SSE à utiliser. La valeur par défaut est `AES256`.
+ `spark.shuffle.storage.s3.serverSideEncryption.kms.key` : ARN de la clé KMS lorsque SSE aws:kms est activé.

Outre ces configurations, vous devrez peut-être définir des configurations telles que `spark.hadoop.fs.s3.enableServerSideEncryption` et **d’autres configurations spécifiques à l’environnement** pour garantir que le chiffrement approprié est appliqué à votre cas d’utilisation.

## Versions du plug-in
<a name="cloud-shuffle-storage-plugin-versions"></a>

Ce plugin est pris en charge pour les versions de Spark associées à chaque AWS Glue version. Le tableau suivant indique la AWS Glue version, la version de Spark et la version du plugin associée avec l'emplacement Amazon S3 du binaire logiciel du plugin.


| Version de l’AWS Glue | Version de Spark | Version du plug-in | Emplacement Amazon S3 | 
| --- | --- | --- | --- | 
| 3.0 | 3.1 | 3.1-amzn-LATEST |  s3 ://aws-glue-etl-artifacts/release/com/amazonaws/chopper-plugin/3.1-amzn-0/chopper-Plugin-3.1-amzn-Latest.jar  | 
| 4.0 | 3.3 | 3.3-amzn-LATEST |  s3 ://aws-glue-etl-artifacts/release/com/amazonaws/chopper-plugin/3.3-amzn-0/chopper-Plugin-3.3-amzn-latest.jar  | 

## Licence
<a name="cloud-shuffle-storage-plugin-binary-license"></a>

Le fichier binaire logiciel de ce plug-in est concédé sous licence dans le cadre de la licence Apache-2.0.

# Surveillance des tâches Spark AWS Glue
<a name="monitor-spark"></a>

**Topics**
+ [Spark Metrics est disponible dans AWS Glue Studio](#console-jobs-details-metrics-spark)
+ [Surveillance des tâches à l’aide de l’interface utilisateur web Apache Spark](monitor-spark-ui.md)
+ [Surveillance à l'aide AWS Glue d'informations sur l'exécution des tâches](monitor-job-insights.md)
+ [Surveillance avec Amazon CloudWatch](monitor-cloudwatch.md)
+ [Surveillance et débogage des tâches](monitor-profile-glue-job-cloudwatch-metrics.md)

## Spark Metrics est disponible dans AWS Glue Studio
<a name="console-jobs-details-metrics-spark"></a>

L'onglet **Metrics (Métriques)** montre les métriques collectées lorsqu'une tâche s'exécute et que le profilage est activé. Les graphiques suivants sont affichés dans les tâches Spark : 
+ Déplacement de données ETL
+ Profil de la mémoire : pilote et programmes d'exécution

Choisissez **View Additional Metrics (Afficher des métriques supplémentaires)** pour afficher les graphiques suivants :
+ Déplacement de données ETL
+ Profil de la mémoire : pilote et programmes d'exécution
+ Remaniement de données sur les programmes d'exécution
+ Chargement de l'UC : pilote et programmes d'exécution
+ Exécution de tâche : programmes d'exécution actifs, étapes achevées et nombre de programmes d'exécution maximum nécessaires

Les données de ces graphiques sont transférées vers CloudWatch des métriques si la tâche est configurée pour collecter des métriques. Pour plus d'informations sur l'activation de métriques et l'interprétation de graphiques, veuillez consulter [Surveillance et débogage des tâches](monitor-profile-glue-job-cloudwatch-metrics.md). 

**Example Graphique du déplacement de données ETL**  
Le graphique du Déplacement de données ETL montre les métriques suivantes :  
+ Le nombre d'octets lus à partir d'Amazon S3 par tous les programmes d'exécution—[`glue.ALL.s3.filesystem.read_bytes`](monitoring-awsglue-with-cloudwatch-metrics.md#glue.ALL.s3.filesystem.read_bytes)
+ Le nombre d'octets écrits à partir d'Amazon S3 par tous les programmes d'exécution – [`glue.ALL.s3.filesystem.write_bytes`](monitoring-awsglue-with-cloudwatch-metrics.md#glue.ALL.s3.filesystem.write_bytes)

![\[Le graphique du déplacement de données ETL dans l'onglet Métriques de la console AWS Glue.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/job_detailed_etl.png)


**Example Graphique du profil de mémoire**  
Le graphique du profil de la mémoire montre les métriques suivantes :  
+ La portion de mémoire utilisée par la pile de la JVM pour ce pilote (mise à l'échelle : 0-1) par le pilote, un programme d'exécution identifié par *executorId* ou tous les exécuteurs –
  + [`glue.driver.jvm.heap.usage`](monitoring-awsglue-with-cloudwatch-metrics.md#glue.driver.jvm.heap.usage)
  + [`glue.executorId.jvm.heap.usage`](monitoring-awsglue-with-cloudwatch-metrics.md#glue.executorId.jvm.heap.usage)
  + [`glue.ALL.jvm.heap.usage`](monitoring-awsglue-with-cloudwatch-metrics.md#glue.ALL.jvm.heap.usage)

![\[Le graphique du profil de la mémoire dans l'onglet Métriques de la console AWS Glue.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/job_detailed_mem.png)


**Example Graphique de remaniement de données sur les programmes d'exécution**  
Le graphique de remaniement de données sur les programmes d'exécution montre les métriques suivantes :  
+ Le nombre d'octets lus par tous les programmes d'exécution pour remanier des données sur ceux-ci - [`glue.driver.aggregate.shuffleLocalBytesRead`](monitoring-awsglue-with-cloudwatch-metrics.md#glue.driver.aggregate.shuffleLocalBytesRead)
+ Le nombre d'octets écrits par tous les programmes d'exécution pour remanier des données sur ceux-ci - [`glue.driver.aggregate.shuffleBytesWritten`](monitoring-awsglue-with-cloudwatch-metrics.md#glue.driver.aggregate.shuffleBytesWritten)

![\[Le graphique de brassage de données sur les programmes d'exécution dans l'onglet Métriques de la console AWS Glue.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/job_detailed_data.png)


**Example Graphique de chargement de l'UC**  
Le graphique de chargement de l'UC montre les métriques suivantes :  
+ La fraction de la charge du système CPU utilisée (mise à l'échelle : 0-1) par le pilote, un programme d'exécution identifié par *executorId* ou tous les exécuteurs –
  + [`glue.driver.system.cpuSystemLoad`](monitoring-awsglue-with-cloudwatch-metrics.md#glue.driver.system.cpuSystemLoad)
  + [`glue.executorId.system.cpuSystemLoad`](monitoring-awsglue-with-cloudwatch-metrics.md#glue.executorId.system.cpuSystemLoad)
  + [`glue.ALL.system.cpuSystemLoad`](monitoring-awsglue-with-cloudwatch-metrics.md#glue.ALL.system.cpuSystemLoad)

![\[Le graphique de la charge du système CPU dans l'onglet Métriques de la console AWS Glue.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/job_detailed_cpu.png)


**Example Graphique d'exécution de tâche**  
Le graphique d'exécution de tâche montre les métriques suivantes :  
+ Le nombre de programmes d'exécution actifs en cours d'exécution - [`glue.driver.ExecutorAllocationManager.executors.numberAllExecutors`](monitoring-awsglue-with-cloudwatch-metrics.md#glue.driver.ExecutorAllocationManager.executors.numberAllExecutors)
+ Le nombre d'étapes terminées - [`glue.aggregate.numCompletedStages`](monitoring-awsglue-with-cloudwatch-metrics.md#glue.driver.aggregate.numCompletedStages)
+ Le nombre maximum de programmes d'exécution nécessaires - [`glue.driver.ExecutorAllocationManager.executors.numberMaxNeededExecutors`](monitoring-awsglue-with-cloudwatch-metrics.md#glue.driver.ExecutorAllocationManager.executors.numberMaxNeededExecutors)

![\[Le graphique de l'exécution de tâche dans l'onglet Métriques de la console AWS Glue.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/job_detailed_exec.png)


# Surveillance des tâches à l’aide de l’interface utilisateur web Apache Spark
<a name="monitor-spark-ui"></a>

Vous pouvez utiliser l’interface utilisateur web Apache Spark pour surveiller et déboguer les tâches ETL AWS Glue en cours d’exécution sur le système de tâches AWS Glue, ainsi que les applications Spark en cours d’exécution sur les points de terminaison de développement AWS Glue. L’interface utilisateur Spark vous permet de vérifier les éléments suivants pour chaque tâche :
+ La chronologie des événements de chaque phase Spark
+ Un graphe orienté acyclique (DAG) de la tâche
+ Les plans physiques et logiques des requêtes SparkSQL
+ Les variables environnementales Spark sous-jacentes pour chaque tâche

Pour plus d'informations sur l'utilisation de l'interface utilisateur web Spark, consultez l'[Interface utilisateur web](https://spark.apache.org/docs/3.3.0/web-ui.html) dans la documentation Spark. Pour obtenir des conseils sur la façon d'interpréter les résultats de l'interface utilisateur Spark afin d'améliorer les performances de votre tâche, consultez les [meilleures pratiques en matière de réglage des performances AWS Glue pour les tâches Apache Spark](https://docs.aws.amazon.com/prescriptive-guidance/latest/tuning-aws-glue-for-apache-spark/introduction.html) dans le guide AWS prescriptif.

 Vous pouvez voir l'interface utilisateur de Spark dans la AWS Glue console. Ceci est disponible lorsqu'une AWS Glue tâche s'exécute sur des versions AWS Glue 3.0 ou ultérieures avec des journaux générés au format standard (plutôt qu'ancien), qui est le format par défaut pour les nouvelles tâches. Si vos fichiers journaux sont supérieurs à 0,5 Go, vous pouvez activer la prise en charge des journaux progressifs pour les exécutions de tâches sur les versions AWS Glue 4.0 ou ultérieures afin de simplifier l'archivage, l'analyse et le dépannage des journaux.

Vous pouvez activer l'interface utilisateur Spark à l'aide de la AWS Glue console ou du AWS Command Line Interface (AWS CLI). Lorsque vous activez l’interface utilisateur Spark, les tâches ETL AWS Glue et les applications Spark sur les points de terminaison de développement AWS Glue peuvent sauvegarder les journaux d’événements Spark dans un emplacement que vous spécifiez dans Amazon Simple Storage Service (Amazon S3). Vous pouvez utiliser les journaux d’événements sauvegardés dans Amazon S3 avec l’interface utilisateur Spark à la fois en temps réel, lorsque la tâche est en cours de fonctionnement, et une fois celle-ci terminée. Tant que les journaux restent dans Amazon S3, l'interface utilisateur Spark de la AWS Glue console peut les consulter. 

## Permissions
<a name="monitor-spark-ui-limitations-permissions"></a>

 Pour utiliser l'interface utilisateur Spark dans la AWS Glue console, vous pouvez utiliser `UseGlueStudio` ou ajouter tous les services individuels APIs. Tous APIs sont nécessaires pour utiliser complètement l'interface utilisateur Spark, mais les utilisateurs peuvent accéder aux fonctionnalités de SparkUI en ajoutant son service APIs dans leur autorisation IAM pour un accès détaillé. 

 `RequestLogParsing` est la plus essentielle, car elle effectue l’analyse des journaux. Le reste APIs est destiné à la lecture des données analysées respectives. Par exemple, `GetStages` permet d’accéder aux données relatives à toutes les étapes d’une tâche Spark. 

 La liste des services Spark UI APIs `UseGlueStudio` mappés se trouve ci-dessous dans l'exemple de politique. La politique ci-dessous permet d’utiliser uniquement les fonctionnalités de l’interface utilisateur de Spark. Pour ajouter d'autres autorisations, telles qu'Amazon S3 et IAM, consultez la section [Création de politiques IAM personnalisées](https://docs.aws.amazon.com/glue/latest/dg/getting-started-min-privs.html#getting-started-all-gs-privs.html) pour. AWS Glue Studio

 La liste des services Spark UI APIs mappés se `UseGlueStudio` trouve ci-dessous dans l'exemple de politique. Lorsque vous utilisez une API de service de l’interface utilisateur de Spark, utilisez l’espace de noms suivant : `glue:<ServiceAPI>`. 

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowGlueStudioSparkUI",
      "Effect": "Allow",
      "Action": [
        "glue:RequestLogParsing",
        "glue:GetLogParsingStatus",
        "glue:GetEnvironment",
        "glue:GetJobs",
        "glue:GetJob",
        "glue:GetStage",
        "glue:GetStages",
        "glue:GetStageFiles",
        "glue:BatchGetStageFiles",
        "glue:GetStageAttempt",
        "glue:GetStageAttemptTaskList",
        "glue:GetStageAttemptTaskSummary",
        "glue:GetExecutors",
        "glue:GetExecutorsThreads",
        "glue:GetStorage",
        "glue:GetStorageUnit",
        "glue:GetQueries",
        "glue:GetQuery"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}
```

------

## Limitations
<a name="monitor-spark-ui-limitations"></a>
+ L'interface utilisateur Spark de la AWS Glue console n'est pas disponible pour les exécutions de tâches effectuées avant le 20 novembre 2023 car elles sont dans l'ancien format de journal.
+  L'interface utilisateur Spark de la AWS Glue console prend en charge les journaux AWS Glue évolutifs pour la version 4.0, tels que ceux générés par défaut dans les tâches de streaming. La somme maximale de tous les fichiers d’événement du journal propagé est de 2 Go. Pour les AWS Glue tâches ne prenant pas en charge les journaux cumulés, la taille maximale du fichier journal des événements pris en charge par SparkUI est de 0,5 Go. 
+  L’interface utilisateur de Spark sans serveur n’est pas disponible pour les journaux d’événements Spark stockés dans un compartiment Amazon S3 auquel seul votre VPC peut accéder. 

## Exemple : interface utilisateur web Apache Spark
<a name="monitor-spark-ui-limitations-example"></a>

Cet exemple vous montre comment utiliser l’interface utilisateur Spark pour comprendre vos performances pour la tâche. Les captures d’écran montrent l’interface utilisateur web Spark telle que fournie par un serveur d’historique Spark autogéré. L'interface utilisateur Spark de la AWS Glue console fournit des vues similaires. Pour plus d'informations sur l'utilisation de l'interface utilisateur web Spark, consultez l'[Interface utilisateur web](https://spark.apache.org/docs/3.3.0/web-ui.html) dans la documentation Spark.

Voici un exemple d’application Spark qui lit à partir de deux sources de données, effectue une transformation de jointure et écrit le tout dans Amazon S3 au format Parquet.

```
import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job
from pyspark.sql.functions import count, when, expr, col, sum, isnull
from pyspark.sql.functions import countDistinct
from awsglue.dynamicframe import DynamicFrame
 
args = getResolvedOptions(sys.argv, ['JOB_NAME'])
 
sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
 
job = Job(glueContext)
job.init(args['JOB_NAME'])
 
df_persons = spark.read.json("s3://awsglue-datasets/examples/us-legislators/all/persons.json")
df_memberships = spark.read.json("s3://awsglue-datasets/examples/us-legislators/all/memberships.json")
 
df_joined = df_persons.join(df_memberships, df_persons.id == df_memberships.person_id, 'fullouter')
df_joined.write.parquet("s3://aws-glue-demo-sparkui/output/")
 
job.commit()
```

La visualisation DAG suivante montre les différentes phases de cette tâche Spark.

![\[Capture d’écran de l’interface utilisateur Spark montrant 2 phases terminées pour la tâche 0.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/spark-ui1.png)


La chronologie d’événements suivante pour une tâche montre le début, l’exécution et la résiliation de différents exécuteurs Spark.

![\[Capture d’écran de l’interface utilisateur Spark montrant les phases terminées, en échec et actives des différents exécuteurs Spark.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/spark-ui2.png)


L’écran suivant montre les détails des plans de requête SparkSQL :
+ Plan logique analysé
+ Plan logique d’analyse
+ Plan logique optimisé
+ Plan physique d’exécution

![\[Plans de requête SparkSQL : plans logiques analysé, d'analyse et optimisé et plan physique d'exécution.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/spark-ui3.png)


**Topics**
+ [Permissions](#monitor-spark-ui-limitations-permissions)
+ [Limitations](#monitor-spark-ui-limitations)
+ [Exemple : interface utilisateur web Apache Spark](#monitor-spark-ui-limitations-example)
+ [Activation de l’interface utilisateur web Apache Spark pour les tâches AWS Glue](monitor-spark-ui-jobs.md)
+ [Lancement du serveur d'historique Spark](monitor-spark-ui-history.md)

# Activation de l’interface utilisateur web Apache Spark pour les tâches AWS Glue
<a name="monitor-spark-ui-jobs"></a>

Vous pouvez utiliser l’interface utilisateur web Apache Spark pour surveiller et déboguer les tâches ETL AWS Glue en cours d’exécution sur le système de tâches AWS Glue. Vous pouvez configurer l’interface utilisateur Spark à l’aide de la console AWS Glue ou de l’ AWS Command Line Interface (AWS CLI).

Toutes les 30 secondes, AWS Glue sauvegarde les journaux d’événements Spark à l’emplacement correspondant au chemin Amazon S3 que vous spécifiez.

**Topics**
+ [Configuration de l’interface utilisateur Spark (console)](#monitor-spark-ui-jobs-console)
+ [Configuration de l’interface utilisateur Spark (AWS CLI)](#monitor-spark-ui-jobs-cli)
+ [Configuration de l’interface utilisateur Spark pour des sessions utilisant des blocs-notes](#monitor-spark-ui-sessions)
+ [Activer les journaux propagés](#monitor-spark-ui-rolling-logs)

## Configuration de l’interface utilisateur Spark (console)
<a name="monitor-spark-ui-jobs-console"></a>

Suivez ces étapes pour configurer l’interface utilisateur Spark à l’aide de la AWS Management Console. Lors de la création d'une AWS Glue tâche, l'interface utilisateur Spark est activée par défaut.

**Pour activer l’interface utilisateur Spark lorsque vous créez ou modifiez une tâche**

1. Connectez-vous à la AWS Glue console AWS Management Console et ouvrez-la à l'adresse [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. Dans le volet de navigation, sélectionnez **Tâches**.

1. Choisissez **Ajouter une tâche** ou sélectionnez-en une existante.

1. Dans **Détails de la tâche**, ouvrez les **Propriétés avancées**.

1. Sous l’onglet **Interface utilisateur Spark**, choisissez **Écrire des journaux de l’interface utilisateur Spark sur Amazon S3**.

1. Spécifiez un chemin Amazon S3 pour stocker les journaux d’événements Spark pour la tâche. Notez que si vous utilisez une configuration de sécurité dans la tâche, le chiffrement s’applique également au fichier journal de l’interface utilisateur Spark. Pour de plus amples informations, veuillez consulter [Chiffrement des données écrites par AWS Glue](encryption-security-configuration.md).

1. Dans la **Configuration de journalisation et de surveillance de l’interface utilisateur Spark** :
   + Sélectionnez **Standard** si vous générez des journaux à afficher dans la AWS Glue console.
   + Sélectionnez **Hérité** si vous générez des journaux à afficher sur un serveur d’historique Spark.
   + Vous pouvez également choisir de générer les deux.

## Configuration de l’interface utilisateur Spark (AWS CLI)
<a name="monitor-spark-ui-jobs-cli"></a>

Pour générer des journaux à consulter avec l'interface utilisateur de Spark, dans la AWS Glue console, utilisez le AWS CLI pour transmettre les paramètres de tâche suivants aux AWS Glue tâches. Pour de plus amples informations, veuillez consulter [Utilisation des paramètres des tâches dans les tâches AWS Glue](aws-glue-programming-etl-glue-arguments.md).

```
'--enable-spark-ui': 'true',
'--spark-event-logs-path': 's3://s3-event-log-path'
```

Pour distribuer les journaux dans leurs anciens emplacements, définissez le paramètre `--enable-spark-ui-legacy-path` sur `"true"`. Si vous ne souhaitez pas générer de journaux dans les deux formats, supprimez le paramètre `--enable-spark-ui`.

## Configuration de l’interface utilisateur Spark pour des sessions utilisant des blocs-notes
<a name="monitor-spark-ui-sessions"></a>

**Avertissement**  
AWS Glue les sessions interactives ne prennent actuellement pas en charge l'interface utilisateur Spark dans la console. Configurez un serveur d’historique Spark.

 Si vous utilisez des AWS Glue blocs-notes, configurez la configuration de SparkUI avant de démarrer la session. Pour ce faire, utilisez le magic cellulaire de `%%configure` : 

```
%%configure { “--enable-spark-ui”: “true”, “--spark-event-logs-path”: “s3://path” }
```

## Activer les journaux propagés
<a name="monitor-spark-ui-rolling-logs"></a>

 L'activation de SparkUI et des fichiers d'événements du journal continu pour les AWS Glue tâches présentent plusieurs avantages : 
+  Fichiers journaux d'événements continus : lorsque les fichiers journaux d'événements sont activés, des fichiers journaux distincts sont AWS Glue générés pour chaque étape de l'exécution de la tâche, ce qui facilite l'identification et le dépannage des problèmes spécifiques à une étape ou à une transformation en particulier. 
+  Meilleure gestion des journaux : les fichiers d’événement du journal propagé permettent de gérer plus efficacement les fichiers journaux. Au lieu d’avoir un seul fichier journal potentiellement volumineux, les journaux sont divisés en fichiers plus petits et plus faciles à gérer en fonction des étapes d’exécution des tâches. Cela peut simplifier l’archivage, l’analyse et le dépannage des journaux. 
+  Tolérance aux pannes améliorée — Si une AWS Glue tâche échoue ou est interrompue, les fichiers d'événements du journal continu peuvent fournir des informations précieuses sur la dernière étape réussie, ce qui permet de reprendre plus facilement la tâche à partir de ce point plutôt que de repartir de zéro. 
+  Optimisation des coûts : en activant les fichiers d’événement du journal propagé, vous pouvez économiser sur les coûts de stockage associés aux fichiers journaux. Au lieu de stocker un seul fichier journal potentiellement volumineux, vous stockez des fichiers journaux plus petits et plus faciles à gérer, ce qui peut être plus rentable, en particulier pour les tâches complexes ou de longue durée. 

 Dans un nouvel environnement, les utilisateurs peuvent activer explicitement les journaux propagés via : 

```
'—conf': 'spark.eventLog.rolling.enabled=true'
```

or

```
'—conf': 'spark.eventLog.rolling.enabled=true —conf 
spark.eventLog.rolling.maxFileSize=128m'
```

 Lorsque les journaux propagés sont activés, `spark.eventLog.rolling.maxFileSize` spécifie la taille maximale du fichier journal des événements avant qu’il ne soit reporté. La valeur par défaut de ce paramètre facultatif, s’il n’est pas spécifié, est de 128 Mo. Le minimum est de 10 Mo. 

 La somme maximale de tous les fichiers d’événement du journal propagé est de 2 Go. Pour les AWS Glue tâches sans support de journalisation continue, la taille maximale du fichier journal des événements pris en charge par SparkUI est de 0,5 Go. 

Vous pouvez désactiver les journaux propagés pour une tâche de streaming en fournissant une configuration supplémentaire. Notez que la maintenance de fichiers journaux très volumineux peut coûter cher.

Pour désactiver les journaux propagés, fournissez la configuration suivante :

```
'--spark-ui-event-logs-path': 'true',
'--conf': 'spark.eventLog.rolling.enabled=false'
```

# Lancement du serveur d'historique Spark
<a name="monitor-spark-ui-history"></a>

Vous pouvez utiliser un serveur d’historique Spark pour visualiser les journaux Spark sur votre propre infrastructure. Vous pouvez voir les mêmes visualisations dans la AWS Glue console pour les exécutions de AWS Glue tâches sur les versions AWS Glue 4.0 ou ultérieures avec des journaux générés au format standard (plutôt qu'ancien). Pour de plus amples informations, veuillez consulter [Surveillance des tâches à l’aide de l’interface utilisateur web Apache Spark](monitor-spark-ui.md).

Vous pouvez lancer le serveur d'historique Spark à l'aide d'un AWS CloudFormation modèle hébergeant le serveur sur une instance EC2, ou le lancer localement à l'aide de Docker.

**Topics**
+ [Lancement du serveur d'historique Spark et affichage de l'interface utilisateur de Spark à l'aide de AWS CloudFormation](#monitor-spark-ui-history-cfn)
+ [Lancement du serveur d'historique Spark et affichage de l'interface utilisateur Spark à l'aide de Docker](#monitor-spark-ui-history-local)

## Lancement du serveur d'historique Spark et affichage de l'interface utilisateur de Spark à l'aide de AWS CloudFormation
<a name="monitor-spark-ui-history-cfn"></a>

Vous pouvez utiliser un AWS CloudFormation modèle pour démarrer le serveur d'historique Apache Spark et afficher l'interface utilisateur Web de Spark. Ces modèles sont des exemples que vous devez modifier pour répondre à vos besoins.

**Pour démarrer le serveur d'historique Spark et afficher l'interface utilisateur de Spark à l'aide de CloudFormation**

1. Choisissez l'un des boutons **Launch Stack** (Lancer la pile) du tableau suivant. Cela lance la pile sur la CloudFormation console.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/monitor-spark-ui-history.html)

1. Sur la page **Specify template** (Spécifier un modèle), choisissez **Next** (Suivant).

1. Sur la page **Specify stack details (Spécifier les détails de la pile)**, entrez le **nom de la pile (Stack name)**. Saisissez des informations supplémentaires sous **Paramètres**.

   1. 

**Configuration de l'interface utilisateur Spark**

      Saisissez les informations suivantes :
      + **IP address range (Plage d'adresses IP)** – Plage d'adresses IP pouvant être utilisée pour afficher l'interface utilisateur Spark. Pour limiter l'accès à partir d'une plage d'adresses IP spécifique, vous devez utiliser une valeur personnalisée. 
      + **History server port (Historique du serveur)** – Port de l'interface utilisateur Spark. Vous pouvez utiliser la valeur par défaut.
      + **Event log directory (Répertoire des journaux d'événements)** – Choisissez l'emplacement où les journaux d'événements Spark sont stockés en provenance de la tâche AWS Glue ou des points finaux de développement. Vous devez utiliser **s3a://** pour le schéma de chemin des journaux d'événements.
      + **Spark package location (Emplacement du package Spark)** – Vous pouvez utiliser la valeur par défaut.
      + Chemin du **keystore : chemin** du SSL/TLS keystore pour HTTPS. Si vous souhaitez utiliser un fichier de magasin de clés personnalisé, vous pouvez spécifier le chemin S3 `s3://path_to_your_keystore_file` ici. Si vous laissez ce paramètre vide, un magasin de clés auto-signé basé sur un certificat est généré et utilisé.
      + **Mot de passe KeyStore** — Saisissez le mot de passe du magasin de clés SSL/TLS pour HTTPS.

   1. 

**Configuration des instances EC2**

      Saisissez les informations suivantes :
      + **Instance type (Type d'instance)** – Type d'instance Amazon EC2 qui héberge le serveur d'historique Spark. Étant donné que ce modèle lance une instance Amazon EC2 dans votre compte, le coût d'Amazon EC2 sera facturé séparément dans votre compte.
      + **Latest AMI ID (Dernier ID AMI)** – ID AMI d'Amazon Linux 2 pour l'instance du serveur d'historique Spark. Vous pouvez utiliser la valeur par défaut.
      + **VPC ID (ID VPC)** – ID du cloud privé virtuel (VPC) pour l'instance du serveur d'historique Spark. Vous pouvez utiliser n'importe lequel des éléments VPCs disponibles dans votre compte. Il n'est pas recommandé d'utiliser un VPC [par défaut avec une ACL réseau par défaut](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html#default-network-acl). Pour plus d'informations, veuillez consulter les rubriques [VPC par défaut et sous-réseaux par défaut](https://docs.aws.amazon.com/vpc/latest/userguide/default-vpc.html) et [Créer un VPC](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-vpcs.html#Create-VPC) dans le *Guide de l'utilisateur Amazon VPC*.
      + **Subnet ID (ID de sous-réseau)** – ID de l'instance du serveur d'historique Spark. Vous pouvez utiliser n'importe quel sous-réseau de votre VPC. Vous devez être en mesure d'atteindre le réseau depuis votre client vers le sous-réseau. Pour y accéder via Internet, vous devez utiliser un sous-réseau public dont la table de routage comporte la passerelle Internet.

   1. Choisissez **Suivant**.

1. Sur la page **Configurer les options de la pile**, pour utiliser les informations d'identification utilisateur actuelles afin de déterminer CloudFormation comment créer, modifier ou supprimer des ressources dans la pile, choisissez **Next**. Vous pouvez également spécifier un rôle dans la section **Autorisations** à utiliser au lieu des autorisations utilisateur actuelles, puis choisissez **Suivant**.

1. Sur la page **Review (Révision)**, vérifiez le modèle. 

   Sélectionnez **Je reconnais que cela CloudFormation pourrait créer des ressources IAM**, puis choisissez **Create stack**.

1. Attendez que la pile soit créée.

1. Ouvrez l'onglet **Sorties**.

   1. Copiez l'URL de **SparkUiPublicUrl**si vous utilisez un sous-réseau public.

   1. Copiez l'URL de **SparkUiPrivateUrl**si vous utilisez un sous-réseau privé.

1. Ouvrez un navigateur web et collez-y l'URL. Cela vous permet d'accéder au serveur à l'aide de HTTPS sur le port spécifié. Votre navigateur peut ne pas reconnaître le certificat du serveur ; dans ce cas, vous devez outrepasser sa protection et continuer tout de même. 

## Lancement du serveur d'historique Spark et affichage de l'interface utilisateur Spark à l'aide de Docker
<a name="monitor-spark-ui-history-local"></a>

Si vous préférez un accès local (pour ne pas avoir d'instance EC2 pour le serveur d'historique Apache Spark), vous pouvez également utiliser Docker pour démarrer le serveur d'historique Apache Spark et afficher l'interface utilisateur Spark localement. Ce fichier Dockerfile est un exemple que vous devez modifier pour répondre à vos besoins. 

 **Conditions préalables** 

Pour plus d'informations sur l'installation de Docker sur votre ordinateur portable, consultez la [communauté Docker Engine](https://docs.docker.com/install/).

**Pour démarrer le serveur d'historique Spark et afficher l'interface utilisateur Spark localement à l'aide de Docker**

1. Téléchargez des fichiers depuis GitHub.

   Téléchargez les fichiers Dockerfile et `pom.xml` à partir des [exemples de code  AWS Glue](https://github.com/aws-samples/aws-glue-samples/tree/master/utilities/Spark_UI/).

1. Déterminez si vous souhaitez utiliser vos informations d'identification utilisateur ou vos informations d'identification utilisateur fédéré pour accéder à AWS.
   + Pour utiliser les informations d'identification utilisateur actuelles pour accéder AWS, obtenez les valeurs à utiliser pour ` AWS_ACCESS_KEY_ID` et `AWS_SECRET_ACCESS_KEY` dans la `docker run` commande. Pour plus d’informations, consultez [Gestion des clés d’accès pour les utilisateurs IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html) dans le *Guide de l’utilisateur IAM*.
   + Pour utiliser les utilisateurs fédérés SAML 2.0 pour l'accès AWS, obtenez les valeurs pour ` AWS_ACCESS_KEY_ID``AWS_SECRET_ACCESS_KEY`, et. ` AWS_SESSION_TOKEN` Pour en savoir plus, consultez [Requesting temporary security credentials](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html) (Demander d'informations d'identification temporaires de sécurité).

1. Déterminez l'emplacement de votre répertoire de journaux d'événements, à utiliser dans la commande `docker run`.

1. Créez l'image Docker à l'aide des fichiers du répertoire local, en utilisant le nom ` glue/sparkui` et l'identification `latest`.

   ```
   $ docker build -t glue/sparkui:latest . 
   ```

1. Créez et démarrez le conteneur Docker.

   Dans les commandes suivantes, utilisez les valeurs obtenues précédemment aux étapes 2 et 3.

   1. Pour créer le conteneur Docker à l'aide de vos informations d'identification utilisateur, utilisez une commande similaire à ce qui suit :

      ```
      docker run -itd -e SPARK_HISTORY_OPTS="$SPARK_HISTORY_OPTS -Dspark.history.fs.logDirectory=s3a://path_to_eventlog
       -Dspark.hadoop.fs.s3a.access.key=AWS_ACCESS_KEY_ID -Dspark.hadoop.fs.s3a.secret.key=AWS_SECRET_ACCESS_KEY"
       -p 18080:18080 glue/sparkui:latest "/opt/spark/bin/spark-class org.apache.spark.deploy.history.HistoryServer"
      ```

   1. Pour créer le conteneur Docker à l'aide d'informations d'identification temporaires, utilisez ` org.apache.hadoop.fs.s3a.TemporaryAWSCredentialsProvider` en tant que fournisseur, et fournissez les valeurs d'identification obtenues à l'étape 2. Pour plus d'informations, consultez la section [Utilisation des informations d'identification de session avec un AWSCredentials fournisseur temporaire](https://hadoop.apache.org/docs/stable/hadoop-aws/tools/hadoop-aws/index.html#Using_Session_Credentials_with_TemporaryAWSCredentialsProvider) dans la *documentation Hadoop : intégration avec Amazon Web Services*.

      ```
      docker run -itd -e SPARK_HISTORY_OPTS="$SPARK_HISTORY_OPTS -Dspark.history.fs.logDirectory=s3a://path_to_eventlog
       -Dspark.hadoop.fs.s3a.access.key=AWS_ACCESS_KEY_ID -Dspark.hadoop.fs.s3a.secret.key=AWS_SECRET_ACCESS_KEY
       -Dspark.hadoop.fs.s3a.session.token=AWS_SESSION_TOKEN
       -Dspark.hadoop.fs.s3a.aws.credentials.provider=org.apache.hadoop.fs.s3a.TemporaryAWSCredentialsProvider"
       -p 18080:18080 glue/sparkui:latest "/opt/spark/bin/spark-class org.apache.spark.deploy.history.HistoryServer"
      ```
**Note**  
Ces paramètres de configuration proviennent du[ Hadoop-AWSModule](https://hadoop.apache.org/docs/stable/hadoop-aws/tools/hadoop-aws/index.html). Il se peut que vous ayez besoin d'ajouter une configuration spécifique en fonction des cas d'utilisation. Par exemple : les utilisateurs des régions isolées devront configurer le ` spark.hadoop.fs.s3a.endpoint`.

1. Ouvrez `http://localhost:18080` dans votre navigateur pour afficher localement l'interface utilisateur Spark.

# Surveillance à l'aide AWS Glue d'informations sur l'exécution des tâches
<a name="monitor-job-insights"></a>

AWS Glue Job Run Insights est une fonctionnalité AWS Glue qui simplifie le débogage des tâches et l'optimisation de vos AWS Glue tâches. AWS Glue fournit l'[interface utilisateur Spark](https://docs.aws.amazon.com/glue/latest/dg/monitor-spark-ui.html), ainsi que [CloudWatch des journaux et des indicateurs](https://docs.aws.amazon.com/glue/latest/dg/monitor-cloudwatch.html) pour surveiller vos AWS Glue tâches. Grâce à cette fonctionnalité, vous obtenez les informations suivantes concernant l'exécution de votre AWS Glue tâche :
+ Numéro de ligne de votre script de AWS Glue tâche qui a échoué.
+ L'action Spark exécutée en dernier dans le plan de requête Spark juste avant l'échec de votre tâche.
+ Les événements d'exception Spark liés à l'échec présenté dans un flux de journal classé par ordre chronologique.
+ L'analyse des causes racines et l'action recommandée (telle que le réglage de votre script) pour résoudre le problème.
+ Les événements Spark courants (messages de journaux relatifs à une action Spark) avec une action recommandée qui traite la cause racine.

Toutes ces informations sont mises à votre disposition à l'aide de deux nouveaux flux de journaux dans les CloudWatch journaux de vos AWS Glue tâches.

## Exigences
<a name="monitor-job-insights-requirements"></a>

La fonctionnalité AWS Glue Job Run Insights est disponible pour AWS Glue les versions 2.0 et supérieures. Vous pouvez suivre le [guide de migration](https://docs.aws.amazon.com/glue/latest/dg/migrating-version-30.html) de vos tâches existantes pour les mettre à niveau à partir d'anciennes AWS Glue versions.

## Activation des informations relatives à l'exécution des tâches pour une tâche AWS Glue ETL
<a name="monitor-job-insights-enable"></a>

Vous pouvez activer les informations relatives à l'exécution des tâches via l'interface de ligne de commande AWS Glue Studio ou la CLI.

### AWS Glue Studio
<a name="monitor-job-insights-requirements"></a>

Lorsque vous créez une tâche via AWS Glue Studio, vous pouvez activer ou désactiver les informations relatives à l'exécution des tâches dans l'onglet **Détails de la tâche**. Vérifiez que la case **Générer des informations sur les tâches** est cochée.

![\[Activation des informations sur l'exécution de la tâche dans AWS Glue Studio.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/monitor-job-run-insights-1.png)


### Ligne de commande
<a name="monitor-job-insights-enable-cli"></a>

Si vous créez une tâche via le CLI, vous pouvez démarrer l'exécution d'une tâche avec un seul nouveau [paramètre de tâche](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-glue-arguments.html) :`--enable-job-insights = true`.

Par défaut, les flux de journaux des informations sur l'exécution de la tâche sont créés sous le même groupe de journaux par défaut utilisé par [AWS Glue journalisation continue](https://docs.aws.amazon.com/glue/latest/dg/monitor-continuous-logging.html), c'est-à-dire, `/aws-glue/jobs/logs-v2/`. Vous pouvez configurer un nom de groupe de journaux personnalisé, des filtres de journaux et des configurations de groupes de journaux à l'aide du même ensemble d'arguments que pour la journalisation continue. Pour plus d'informations, consultez la section [Activation de la journalisation continue pour les AWS Glue tâches](https://docs.aws.amazon.com/glue/latest/dg/monitor-continuous-logging-enable.html).

## Accès aux flux de journaux Job Run Insights dans CloudWatch
<a name="monitor-job-insights-access"></a>

Lorsque la fonctionnalité des informations sur l'exécution de la tâche est activée, deux flux de journaux peuvent être créés en cas d'échec d'une exécution de tâche. Lorsqu'une tâche se termine correctement, aucun des flux n'est généré.

1. *Flux de journaux d'analyse des exceptions* :`<job-run-id>-job-insights-rca-driver`. Ce flux fournit les informations suivantes :
   + Numéro de ligne du script de AWS Glue tâche à l'origine de l'échec.
   + L'action Spark exécutée en dernier dans le plan de requête Spark (DAG).
   + Les événements chronologiques concis provenant du pilote Spark et les programmes d'exécution associés à l'exception. Vous pourrez trouver des détails tels que des messages d'erreur complets, la tâche Spark qui a échoué et l'ID de ses programmes d'exécution. Ces informations vous aident à vous concentrer sur le flux de journal du programme d'exécution spécifique pour une analyse plus approfondie si nécessaire.

1. *Flux d'informations basé sur des règles* : 
   + Analyse des causes racines et recommandations sur la manière de corriger les erreurs (telles que l'utilisation d'un paramètre de tâche spécifique pour optimiser les performances).
   + Les événements Spark pertinents servant de base à l'analyse des causes racines et à une action recommandée.

**Note**  
Le premier flux n'existera que si des événements Spark d'exception sont disponibles pour une exécution de tâche qui a échoué, et le second flux n'existera que si des informations sont disponibles pour l'exécution de la tâche qui a échoué. Par exemple, si votre tâche se termine correctement, aucun des flux ne sera généré. Si votre tâche échoue, mais qu'aucune règle définie par le service ne correspond à votre scénario d'échec, seul le premier flux sera généré.

Si la tâche est créée à partir de AWS Glue Studio, les liens vers les flux ci-dessus sont également disponibles sous l'onglet Détails de l'exécution du travail (Job run insights) sous la forme « Journaux d'erreurs concis et consolidés » et « Analyse des erreurs et conseils ».

![\[La page détails de l'exécution de la tâche contient des liens vers les flux de journaux.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/monitor-job-run-insights-2.png)


## Exemple d'analyse de l'exécution des AWS Glue tâches
<a name="monitor-job-insights-example"></a>

Dans cette section, nous vous présentons un exemple de la façon dont la fonctionnalité d'informations sur l'exécution de la tâche peut vous aider à résoudre un problème lié à votre tâche qui a échoué. Dans cet exemple, un utilisateur a oublié d'importer le module requis (tensorflow) dans une AWS Glue tâche pour analyser et créer un modèle d'apprentissage automatique à partir de ses données.

```
import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job
from pyspark.sql.types import *
from pyspark.sql.functions import udf,col

args = getResolvedOptions(sys.argv, ['JOB_NAME'])

sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args['JOB_NAME'], args)

data_set_1 = [1, 2, 3, 4]
data_set_2 = [5, 6, 7, 8]

scoresDf = spark.createDataFrame(data_set_1, IntegerType())

def data_multiplier_func(factor, data_vector):
    import tensorflow as tf
    with tf.compat.v1.Session() as sess:
        x1 = tf.constant(factor)
        x2 = tf.constant(data_vector)
        result = tf.multiply(x1, x2)
        return sess.run(result).tolist()

data_multiplier_udf = udf(lambda x:data_multiplier_func(x, data_set_2), ArrayType(IntegerType(),False))
factoredDf = scoresDf.withColumn("final_value", data_multiplier_udf(col("value")))
print(factoredDf.collect())
```

La tâche échoue et ,sans la fonctionnalité informations sur l'exécution de la tâche, vous ne voyez que ce message généré par Spark :

`An error occurred while calling o111.collectToPython. Traceback (most recent call last):`

Le message est ambigu et limite votre expérience de débogage. Dans ce cas, cette fonctionnalité vous fournit des informations supplémentaires dans deux flux de CloudWatch journaux :

1. Le flux de journal `job-insights-rca-driver` :
   + *Événements d'exception *: ce flux de journal fournit les événements d'exception Spark liés à l'échec collecté à partir du pilote Spark et de différents travailleurs distribués. Ces événements vous aident à comprendre la propagation chronologique de l'exception lorsque le code défectueux s'exécute sur les tâches Spark, les exécuteurs et les étapes réparties entre les travailleurs. AWS Glue 
   + *Numéros de ligne*: ce flux de journal identifie la ligne 21, qui a appelé à importer le module Python manquant à l'origine de l'échec. Il identifie également la ligne 24, l'appel à l'action Spark `collect()`, en tant que dernière ligne exécutée dans votre script.  
![\[Le flux du job-insights-rca-driver journal.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/monitor-job-run-insights-3.png)

1. Le flux de journal `job-insights-rule-driver` :
   + *Cause première et recommandation* : Outre le numéro de ligne et le numéro de ligne de la dernière exécution correspondant à l'erreur dans votre script, ce flux de journal indique l'analyse des causes profondes et vous recommande de suivre le AWS Glue document et de configurer les paramètres de tâche nécessaires afin d'utiliser un module Python supplémentaire dans votre AWS Glue tâche. 
   + *Événement récurrent* : ce flux de journal affiche également l'événement d'exception Spark qui a été évalué avec la règle définie par le service afin d'en déduire la cause racine et de fournir une recommandation.  
![\[Le flux du job-insights-rule-driver journal.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/monitor-job-run-insights-4.png)

# Surveillance avec Amazon CloudWatch
<a name="monitor-cloudwatch"></a>

Vous pouvez effectuer un suivi AWS Glue à l'aide d'Amazon CloudWatch, qui collecte et traite les données brutes sous AWS Glue forme de near-real-time métriques lisibles. Ces statistiques sont enregistrées pour une durée de deux semaines afin de pouvoir accéder aux informations historiques vous permettant d'acquérir un meilleur point de vue sur la façon dont votre service ou application web s'exécute. Par défaut, AWS Glue les données des métriques sont envoyées CloudWatch automatiquement à. Pour plus d'informations, consultez [Qu'est-ce qu'Amazon CloudWatch ?](https://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/WhatIsCloudWatch.html) dans le *guide de CloudWatch l'utilisateur Amazon*, et[AWS Glue métriques](monitoring-awsglue-with-cloudwatch-metrics.md#awsglue-metrics).

 **Journalisation continue** 

AWS Glue prend également en charge la journalisation continue en temps réel pour les tâches AWS Glue. Lorsque la journalisation continue est activée pour une tâche, vous pouvez consulter les journaux en temps réel sur la AWS Glue console ou sur le tableau de bord de la CloudWatch console. Pour de plus amples informations, veuillez consulter [Journalisation pour les AWS Glue emplois](monitor-continuous-logging.md).

 **Métriques d'observabilité** 

 Lorsque les **métriques d'observabilité du Job** sont activées, des Amazon CloudWatch métriques supplémentaires sont générées lors de l'exécution du job. Utilisez les métriques d'observabilité AWS Glue pour générer des informations sur ce qui se passe au sein de votre AWS Glue afin d'améliorer le triage et l'analyse des problèmes. 

**Topics**
+ [Surveillance AWS Glue à l'aide CloudWatch des métriques Amazon](monitoring-awsglue-with-cloudwatch-metrics.md)
+ [Configuration des CloudWatch alarmes Amazon sur les profils AWS Glue d'emploi](monitor-profile-glue-job-cloudwatch-alarms.md)
+ [Journalisation pour les AWS Glue emplois](monitor-continuous-logging.md)
+ [Surveillance à l'aide de métriques d'observabilité AWS Glue](monitor-observability.md)

# Surveillance AWS Glue à l'aide CloudWatch des métriques Amazon
<a name="monitoring-awsglue-with-cloudwatch-metrics"></a>

Vous pouvez surveiller les opérations d'AWS Glue à l'aide du profileur de tâche AWS Glue. Il collecte et traite les données brutes des AWS Glue tâches pour en faire des métriques lisibles en temps quasi réel stockées sur Amazon CloudWatch. Ces statistiques sont conservées et agrégées CloudWatch afin que vous puissiez accéder aux informations historiques pour avoir une meilleure idée des performances de votre application.

**Note**  
 Des frais supplémentaires peuvent vous être facturés lorsque vous activez les indicateurs relatifs aux tâches et que CloudWatch des indicateurs personnalisés sont créés. Pour plus d'informations, consultez les [ CloudWatch tarifs Amazon](https://aws.amazon.com/cloudwatch/pricing/). 

## Présentation des métriques AWS Glue
<a name="metrics-overview"></a>

Lorsque vous interagissez avecAWS Glue, il envoie des métriques à CloudWatch. Vous pouvez consulter ces statistiques à l'aide de la AWS Glue console (méthode préférée), du tableau de bord de la CloudWatch console ou du AWS Command Line Interface (AWS CLI). 

**Pour afficher des métriques à l'aide du tableau de bord de la console AWS Glue**

Vous pouvez afficher un résumé ou des graphiques détaillés des métriques pour une tâche ou des graphiques détaillés pour l'exécution d'une tâche. 

1. Connectez-vous à la AWS Glue console AWS Management Console et ouvrez-la à l'adresse [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. Dans le panneau de navigation, choisissez **Surveillance de l'exécution des tâches**.

1. Dans **Exécutions de tâches**, choisissez **Actions** pour arrêter une tâche en cours d'exécution, afficher une tâche ou restaurer le signet d'une tâche.

1. Sélectionnez une tâche, puis choisissez **Afficher les informations de l'exécution** pour afficher des informations supplémentaires sur l'exécution de la tâche.

**Pour consulter les statistiques à l'aide du tableau de bord de CloudWatch la console**

Les métriques sont d’abord regroupées par espace de noms de service, puis par les différentes combinaisons de dimension au sein de chaque espace de noms.

1. Ouvrez la CloudWatch console à l'adresse [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Dans le panneau de navigation, sélectionnez ‎**Métriques**.

1. Sélectionnez l'espace de noms **Glue**.

**Pour consulter les statistiques à l'aide du AWS CLI**
+ À partir d’une invite de commande, utilisez la commande suivante :

  ```
  1. aws cloudwatch list-metrics --namespace Glue
  ```

AWS Gluerapporte les métriques CloudWatch toutes les 30 secondes, et les tableaux de bord des CloudWatch métriques sont configurés pour les afficher toutes les minutes. Les métriques AWS Glue représentent des valeurs delta des valeurs précédemment rapportées. Le cas échéant, les tableaux de bord de métriques regroupent (additionnent) les valeurs de plages de 30 secondes pour obtenir une valeur pour la totalité de la dernière minute.

### AWS Glue comportement des métriques pour les tâches Spark
<a name="metrics-overview-spark"></a>

 Les métriques AWS Glue sont activées à l'initialisation d'un `GlueContext` dans un script et sont généralement mises à jour uniquement à la fin d'une tâche Apache Spark. Elles représentent les valeurs regroupées sur l'ensemble des tâches Spark terminées jusqu'alors.

Cependant, les métriques Spark AWS Glue transmises à CloudWatch sont généralement des valeurs absolues représentant l'état actuel au moment où elles sont signalées. AWS Glueles rapporte CloudWatch toutes les 30 secondes, et les tableaux de bord des métriques indiquent généralement la moyenne des points de données reçus au cours de la dernière minute.

Les noms des métriques AWS Glue sont tous précédés par l'un des types suivants de préfixe :
+ `glue.driver.` – Les métriques dont les noms commencent par ce préfixe représentent des métriques AWS Glue regroupées à partir de tous les programmes d'exécution dans le pilote Spark ou des métriques Spark correspondant au pilote Spark.
+ `glue.`*executorId*`.` – L'*executorId* correspond au numéro d'un programme d'exécution Spark spécifique. Il correspond aux programmes d'exécution répertoriés dans les journaux.
+ `glue.ALL.` - Les métriques dont les noms commencent par ce préfixe regroupent des valeurs de tous les programmes d'exécution Spark.

## AWS Glue métriques
<a name="awsglue-metrics"></a>

AWS Glue établit le profil et envoie les métriques suivantes CloudWatch toutes les 30 secondes, et le tableau de bord AWS Glue des métriques les indique une fois par minute :


| Métrique | Description | 
| --- | --- | 
|  `glue.driver.aggregate.bytesRead` |  Nombre d'octets lus à partir de toutes les sources de données par toutes les tâches Spark exécutées dans tous les programmes d'exécution. Dimensions valides : `JobName` (le nom du AWS Glue Job), `JobRunId` (l' JobRun ID ou`ALL`) et `Type` (le nombre). Statistiques valides : SUM. Cette métrique est une valeur delta par rapport à la dernière valeur signalée. Par conséquent, sur le tableau de bord AWS Glue des mesures, une statistique SUM est utilisée pour l'agrégation.  Unité : octets Peut être utilisé pour contrôler ce qui suit : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/monitoring-awsglue-with-cloudwatch-metrics.html) Cette métrique peut être utilisée de la même manière que la métrique `glue.ALL.s3.filesystem.read_bytes`, à la différence qu'elle est mise à jour à la fin d'une tâche Spark et qu'elle capture également les sources de données non S3.  | 
|  `glue.driver.aggregate.elapsedTime` |  Le temps écoulé ETL en millisecondes (n'inclut pas les temps d'amorçage de la tâche). Dimensions valides : `JobName` (le nom du AWS Glue Job), `JobRunId` (l' JobRun ID ou`ALL`) et `Type` (le nombre). Statistiques valides : SUM. Cette métrique est une valeur delta par rapport à la dernière valeur signalée. Par conséquent, sur le tableau de bord AWS Glue des mesures, une statistique SUM est utilisée pour l'agrégation. Unité : millisecondes Peut être utilisé pour déterminer combien le temps moyen requis pour une exécution de tâche. Voici quelques façons d'utiliser les données : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/monitoring-awsglue-with-cloudwatch-metrics.html)  | 
|   `glue.driver.aggregate.numCompletedStages` |  Le nombre d'étapes terminées dans la tâche. Dimensions valides : `JobName` (le nom du AWS Glue Job), `JobRunId` (l' JobRun ID ou`ALL`) et `Type` (le nombre). Statistiques valides : SUM. Cette métrique est une valeur delta par rapport à la dernière valeur signalée. Par conséquent, sur le tableau de bord AWS Glue des mesures, une statistique SUM est utilisée pour l'agrégation. Unité : nombre Peut être utilisé pour contrôler ce qui suit : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/monitoring-awsglue-with-cloudwatch-metrics.html) Voici quelques façons d'utiliser les données : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/monitoring-awsglue-with-cloudwatch-metrics.html)  | 
|  `glue.driver.aggregate.numCompletedTasks` |  Le nombre de tâches terminées dans la tâche. Dimensions valides : `JobName` (le nom du AWS Glue Job), `JobRunId` (l' JobRun ID ou`ALL`) et `Type` (le nombre). Statistiques valides : SUM. Cette métrique est une valeur delta par rapport à la dernière valeur signalée. Par conséquent, sur le tableau de bord AWS Glue des mesures, une statistique SUM est utilisée pour l'agrégation. Unité : nombre Peut être utilisé pour contrôler ce qui suit : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/monitoring-awsglue-with-cloudwatch-metrics.html)  | 
|  `glue.driver.aggregate.numFailedTasks` |  Nombre de tâches ayant échoué. Dimensions valides : `JobName` (le nom du AWS Glue Job), `JobRunId` (l' JobRun ID ou`ALL`) et `Type` (le nombre). Statistiques valides : SUM. Cette métrique est une valeur delta par rapport à la dernière valeur signalée. Par conséquent, sur le tableau de bord AWS Glue des mesures, une statistique SUM est utilisée pour l'agrégation. Unité : nombre Peut être utilisé pour contrôler ce qui suit : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/monitoring-awsglue-with-cloudwatch-metrics.html) Les données peuvent être utilisées pour définir des alarmes pour des échecs accrus qui pourraient suggérer des anomalies dans les données, les clusters ou les scripts.  | 
|  `glue.driver.aggregate.numKilledTasks` |  Nombre de tâches supprimées. Dimensions valides : `JobName` (le nom du AWS Glue Job), `JobRunId` (l' JobRun ID ou`ALL`) et `Type` (le nombre). Statistiques valides : SUM. Cette métrique est une valeur delta par rapport à la dernière valeur signalée. Par conséquent, sur le tableau de bord AWS Glue des mesures, une statistique SUM est utilisée pour l'agrégation. Unité : nombre Peut être utilisé pour contrôler ce qui suit : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/monitoring-awsglue-with-cloudwatch-metrics.html) Voici quelques façons d'utiliser les données : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/monitoring-awsglue-with-cloudwatch-metrics.html)  | 
|  `glue.driver.aggregate.recordsRead` |  Nombre d'enregistrements lus à partir de toutes les sources de données par toutes les tâches Spark terminées exécutées dans tous les programmes d'exécution. Dimensions valides : `JobName` (le nom du AWS Glue Job), `JobRunId` (l' JobRun ID ou`ALL`) et `Type` (le nombre). Statistiques valides : SUM. Cette métrique est une valeur delta par rapport à la dernière valeur signalée. Par conséquent, sur le tableau de bord AWS Glue des mesures, une statistique SUM est utilisée pour l'agrégation. Unité : nombre Peut être utilisé pour contrôler ce qui suit : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/monitoring-awsglue-with-cloudwatch-metrics.html) Cette métrique peut être utilisée de manière similaire à la métrique `glue.ALL.s3.filesystem.read_bytes`, à la différence qu'elle est mise à jour à la fin d'une tâche Spark.  | 
|   `glue.driver.aggregate.shuffleBytesWritten` |  Nombre d'octets écrits par tous les exécuteurs pour mélanger les données entre eux depuis le rapport précédent (agrégé par le tableau de bord des AWS Glue mesures sous la forme du nombre d'octets écrits à cette fin au cours de la minute précédente). Dimensions valides : `JobName` (le nom du AWS Glue Job), `JobRunId` (l' JobRun ID ou`ALL`) et `Type` (le nombre). Statistiques valides : SUM. Cette métrique est une valeur delta par rapport à la dernière valeur signalée. Par conséquent, sur le tableau de bord AWS Glue des mesures, une statistique SUM est utilisée pour l'agrégation. Unité : octets Peut être utilisé pour contrôler le remaniement de données dans les tâches (jointures volumineuses, GroupBy, répartition, coalesce). Voici quelques façons d'utiliser les données : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/monitoring-awsglue-with-cloudwatch-metrics.html)  | 
|   `glue.driver.aggregate.shuffleLocalBytesRead` |  Nombre d'octets lus par tous les exécuteurs pour mélanger les données entre eux depuis le rapport précédent (agrégé par le tableau de bord des AWS Glue mesures sous la forme du nombre d'octets lus à cette fin au cours de la minute précédente). Dimensions valides : `JobName` (le nom du AWS Glue Job), `JobRunId` (l' JobRun ID ou`ALL`) et `Type` (le nombre). Statistiques valides : SUM. Cette métrique est une valeur delta par rapport à la dernière valeur signalée. Par conséquent, sur le tableau de bord AWS Glue des mesures, une statistique SUM est utilisée pour l'agrégation. Unité : octets Peut être utilisé pour contrôler le remaniement de données dans les tâches (jointures volumineuses, GroupBy, répartition, coalesce). Voici quelques façons d'utiliser les données : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/monitoring-awsglue-with-cloudwatch-metrics.html)  | 
|  `glue.driver.BlockManager.disk.diskSpaceUsed_MB` |  Nombre de mégaoctets d'espace disque utilisés sur tous les programmes d'exécution. Dimensions valides : `JobName` (le nom du AWS Glue Job), `JobRunId` (l' JobRun identifiant ou`ALL`) et `Type` (la jauge). Statistiques valides : moyenne Il s'agit d'une métrique Spark, rapportée en tant que valeur absolue. Unité : mégaoctets Peut être utilisé pour contrôler ce qui suit : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/monitoring-awsglue-with-cloudwatch-metrics.html) Voici quelques façons d'utiliser les données : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/monitoring-awsglue-with-cloudwatch-metrics.html)  | 
|   `glue.driver.ExecutorAllocationManager.executors.numberAllExecutors` |  Le nombre de programmes d'exécution de tâches actifs en cours d'exécution. Dimensions valides : `JobName` (le nom du AWS Glue Job), `JobRunId` (l' JobRun identifiant ou`ALL`) et `Type` (la jauge). Statistiques valides : moyenne Il s'agit d'une métrique Spark, rapportée en tant que valeur absolue. Unité : nombre Peut être utilisé pour contrôler ce qui suit : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/monitoring-awsglue-with-cloudwatch-metrics.html) Voici quelques façons d'utiliser les données : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/monitoring-awsglue-with-cloudwatch-metrics.html)  | 
|   `glue.driver.ExecutorAllocationManager.executors.numberMaxNeededExecutors` |  Nombre maximal de programmes d'exécution de tâches (en cours d'exécution et en attente) nécessaires pour satisfaire la charge actuelle. Dimensions valides : `JobName` (le nom du AWS Glue Job), `JobRunId` (l' JobRun identifiant ou`ALL`) et `Type` (la jauge). Statistiques valides : maximum Il s'agit d'une métrique Spark, rapportée en tant que valeur absolue. Unité : nombre Peut être utilisé pour contrôler ce qui suit : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/monitoring-awsglue-with-cloudwatch-metrics.html) Voici quelques façons d'utiliser les données : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/monitoring-awsglue-with-cloudwatch-metrics.html)  | 
|   `glue.driver.jvm.heap.usage`  `glue.`*executorId*`.jvm.heap.usage`  `glue.ALL.jvm.heap.usage`  |  La fraction de mémoire utilisée par la pile de la JVM pour ce pilote (échelle : 0-1) pour le pilote, un programme d'exécution identifié par executorId ou TOUS les programmes d'exécution. Dimensions valides : `JobName` (le nom du AWS Glue Job), `JobRunId` (l' JobRun identifiant ou`ALL`) et `Type` (la jauge). Statistiques valides : moyenne Il s'agit d'une métrique Spark, rapportée en tant que valeur absolue. Unité : pourcentage Peut être utilisé pour contrôler ce qui suit : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/monitoring-awsglue-with-cloudwatch-metrics.html) Voici quelques façons d'utiliser les données : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/monitoring-awsglue-with-cloudwatch-metrics.html)  | 
|  `glue.driver.jvm.heap.used`  `glue.`*executorId*`.jvm.heap.used`  `glue.ALL.jvm.heap.used`  |  le nombre d'octets de mémoire utilisés par la pile JVM pour le pilote, le programme d'exécution identifié par *executorId*, ou TOUS les programmes d'exécution. Dimensions valides : `JobName` (le nom du AWS Glue Job), `JobRunId` (l' JobRun identifiant ou`ALL`) et `Type` (la jauge). Statistiques valides : moyenne Il s'agit d'une métrique Spark, rapportée en tant que valeur absolue. Unité : octets Peut être utilisé pour contrôler ce qui suit : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/monitoring-awsglue-with-cloudwatch-metrics.html) Voici quelques façons d'utiliser les données : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/monitoring-awsglue-with-cloudwatch-metrics.html)  | 
|   `glue.driver.s3.filesystem.read_bytes`  `glue.`*executorId*`.s3.filesystem.read_bytes`  `glue.ALL.s3.filesystem.read_bytes`  |  Le nombre d'octets lus depuis Amazon S3 par le pilote, un exécuteur identifié par *ExecutoriD* ou TOUS les exécuteurs depuis le rapport précédent (agrégé par le tableau de bord des métriques sous la forme du nombre d'octets lus AWS Glue au cours de la minute précédente). Dimensions valides :`JobName`, `JobRunId`, et `Type` (jauge). Statistiques valides : SUM. Cette métrique est une valeur delta par rapport à la dernière valeur signalée. Par conséquent, sur le tableau de bord AWS Glue des mesures, une statistique SUM est utilisée pour l'agrégation. La zone située sous la courbe sur le tableau de bord AWS Glue des métriques peut être utilisée pour comparer visuellement les octets lus lors de deux exécutions de tâches différentes. Unité : octets. Peut être utilisé pour contrôler ce qui suit : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/monitoring-awsglue-with-cloudwatch-metrics.html) Les données résultantes peuvent être utilisées pour ce qui suit : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/monitoring-awsglue-with-cloudwatch-metrics.html)  | 
|   `glue.driver.s3.filesystem.write_bytes`  `glue.`*executorId*`.s3.filesystem.write_bytes`  `glue.ALL.s3.filesystem.write_bytes`  |  Le nombre d'octets écrits sur Amazon S3 par le pilote, un exécuteur identifié par *ExecutoriD* ou TOUS les exécuteurs depuis le rapport précédent (agrégé par le tableau de bord des métriques sous la forme du nombre d'octets écrits AWS Glue au cours de la minute précédente). Dimensions valides :`JobName`, `JobRunId`, et `Type` (jauge). Statistiques valides : SUM. Cette métrique est une valeur delta par rapport à la dernière valeur signalée. Par conséquent, sur le tableau de bord AWS Glue des mesures, une statistique SUM est utilisée pour l'agrégation. La zone située sous la courbe sur le tableau de bord AWS Glue des métriques peut être utilisée pour comparer visuellement les octets écrits lors de deux exécutions de tâches différentes. Unité : octets Peut être utilisé pour contrôler ce qui suit : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/monitoring-awsglue-with-cloudwatch-metrics.html) Voici quelques façons d'utiliser les données : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/monitoring-awsglue-with-cloudwatch-metrics.html)  | 
|  `glue.driver.streaming.numRecords` |  Nombre d'enregistrements reçus dans un micro-lot. Cette métrique n'est disponible que pour les jobs de AWS Glue streaming dotés de AWS Glue la version 2.0 ou supérieure. Dimensions valides : `JobName` (le nom de la AWS Glue tâche), `JobRunId` (l' JobRun identifiant ou`ALL`) et `Type` (nombre). Statistiques valides : somme, minimum, maximum, moyenne, percentile Unité : nombre Peut être utilisé pour contrôler ce qui suit : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/monitoring-awsglue-with-cloudwatch-metrics.html)  | 
|  `glue.driver.streaming.batchProcessingTimeInMs` |  Temps nécessaire pour traiter les lots en millisecondes. Cette métrique n'est disponible que pour les jobs de AWS Glue streaming dotés de AWS Glue la version 2.0 ou supérieure. Dimensions valides : `JobName` (le nom de la AWS Glue tâche), `JobRunId` (l' JobRun identifiant ou`ALL`) et `Type` (nombre). Statistiques valides : somme, minimum, maximum, moyenne, percentile Unité : nombre Peut être utilisé pour contrôler ce qui suit : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/monitoring-awsglue-with-cloudwatch-metrics.html)  | 
|   `glue.driver.system.cpuSystemLoad`  `glue.`*executorId*`.system.cpuSystemLoad`  `glue.ALL.system.cpuSystemLoad`  |  La fraction de chargement du système UC utilisée (échelle : 0-1) par le pilote, un programme d'exécution identifié par *executorId* ou tous les programmes d'exécution. Dimensions valides : `JobName` (le nom de la AWS Glue tâche), `JobRunId` (l' JobRun identifiant ou`ALL`) et `Type` (la jauge). Statistiques valides : moyenne Cette métrique est rapportée en tant que valeur absolue. Unité : pourcentage Peut être utilisé pour contrôler ce qui suit : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/monitoring-awsglue-with-cloudwatch-metrics.html) Voici quelques façons d'utiliser les données : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/monitoring-awsglue-with-cloudwatch-metrics.html)  | 

## Dimensions pour les AWS Glue métriques
<a name="awsglue-metricdimensions"></a>

AWS Glue les métriques utilisent l'espace de AWS Glue noms et fournissent des métriques pour les dimensions suivantes :


| Dimension | Description | 
| --- | --- | 
|  `JobName`  |  Cette dimension filtre les métriques de toutes les exécutions d'une AWS Glue tâche spécifique.  | 
|  `JobRunId`  |  Cette dimension filtre les métriques d'une AWS Glue tâche spécifique exécutée par un JobRun ID, ou`ALL`.  | 
|  `Type`  |  Cette dimension filtre les métriques par `count` (un nombre agrégé) ou `gauge` (une valeur à un moment donné).  | 

Pour plus d'informations, consultez le [guide de CloudWatch l'utilisateur Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/).

# Configuration des CloudWatch alarmes Amazon sur les profils AWS Glue d'emploi
<a name="monitor-profile-glue-job-cloudwatch-alarms"></a>

AWS Glueles statistiques sont également disponibles sur Amazon CloudWatch. Vous pouvez configurer des alarmes sur n'importe quelle métrique AWS Glue pour des tâches planifiées. 

Voici quelques scénarios courants de configuration d'alarmes :
+ Tâches manquant de mémoire (OOM - out of memory) : définissez une alarme lorsque l'utilisation de la mémoire dépasse la moyenne normale pour le pilote ou pour le programme d'exécution d'une tâche AWS Glue.
+ Programmes d'exécution en retard : définissez une alarme lorsque le nombre de programmes d'exécution passe au‑dessous d'un certain seuil durant un long moment dans une tâche AWS Glue.
+ Retard ou retraitement des données : comparez les indicateurs des tâches individuelles d'un flux de travail à l'aide d'une expression CloudWatch mathématique. Vous pouvez ensuite déclencher une alarme sur la valeur résultant de l'expression (comme le ratio entre les octets écrits par une tâche et les octets lus par une tâche suivante).

Pour obtenir des instructions détaillées sur la configuration des alarmes, consultez la section [Créer ou modifier une CloudWatch alarme](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ConsoleAlarms.html) dans le *[guide de l'utilisateur Amazon CloudWatch Events](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/)*. 

Pour les scénarios de surveillance et de débogage utilisant CloudWatch, voir[Surveillance et débogage des tâches](monitor-profile-glue-job-cloudwatch-metrics.md).

# Journalisation pour les AWS Glue emplois
<a name="monitor-continuous-logging"></a>

 Dans la AWS Glue version 5.0, toutes les tâches disposent de fonctionnalités de journalisation en temps réel. En outre, vous pouvez spécifier des options de configuration personnalisées pour personnaliser le comportement de la journalisation. Ces options incluent la définition du nom du groupe de Amazon CloudWatch journaux, du préfixe du flux de Amazon CloudWatch journal (qui précédera l'ID et l'ID AWS Glue d'exécution de la tâche) et driver/executor du modèle de conversion des journaux pour les messages de journal. Ces configurations vous permettent d’agréger les journaux dans des groupes de journaux Amazon CloudWatch personnalisés avec différentes politiques d’expiration. En outre, vous pouvez analyser les journaux plus efficacement en utilisant des préfixes de flux de journaux et des modèles de conversion personnalisés. Ce niveau de personnalisation vous permet d’optimiser la gestion et l’analyse des journaux en fonction de vos besoins spécifiques. 

## Comportement de journalisation en AWS Glue version 5.0
<a name="monitor-logging-behavior-glue-50"></a>

 Par défaut, les journaux du système, les journaux du démon Spark et les journaux de l'utilisateur AWS Glue sont écrits dans le groupe de `/aws-glue/jobs/error` journaux. Amazon CloudWatch D’autre part, les journaux utilisateur stdout (sortie standard) et stderr (erreur standard) sont écrits dans le groupe de journaux `/aws-glue/jobs/output` par défaut. 

## Journalisation personnalisée
<a name="monitor-logging-custom"></a>

 Vous pouvez personnaliser le groupe de journaux par défaut et les préfixes de flux de journaux à l’aide des arguments de tâche suivants : 
+  `--custom-logGroup-prefix` : vous permet de spécifier un préfixe personnalisé pour les groupes de journaux `/aws-glue/jobs/error` et `/aws-glue/jobs/output`. Si vous fournissez un préfixe personnalisé, les noms des groupes de journaux seront au format suivant : 
  +  `/aws-glue/jobs/error` sera `<customer prefix>/error` 
  +  `/aws-glue/jobs/output ` sera `<customer prefix>/output` 
+  `--custom-logStream-prefix` : vous permet de spécifier un préfixe personnalisé pour les noms des flux de journaux au sein des groupes de journaux. Si vous fournissez un préfixe personnalisé, les noms des flux de journaux seront au format suivant : 
  +  `jobrunid-driver` sera `<customer log stream>-driver` 
  +  `jobrunid-executorNum` sera `<customer log stream>-executorNum` 

 Règles de validation et restrictions relatives aux préfixes personnalisés : 
+  La longueur du nom complet du flux de journaux doit être comprise entre 1 et 512 caractères. 
+  Le préfixe personnalisé lui-même est limité à 400 caractères. 
+  Le préfixe personnalisé doit correspondre au modèle d’expression régulière `[^:\$1] \$1` (les caractères spéciaux autorisés sont « \$1 », « - » et « / »). 

## Journalisation des messages spécifiques aux applications à l’aide de l’enregistreur de script personnalisé
<a name="monitor-logging-script"></a>

Vous pouvez utiliser l' AWS Glue enregistreur pour enregistrer tous les messages spécifiques à l'application dans le script qui sont envoyés en temps réel au flux de journal du pilote.

L'exemple suivant illustre un script Python.

```
from awsglue.context import GlueContext
from pyspark.context import SparkContext

sc = SparkContext()
glueContext = GlueContext(sc)
logger = glueContext.get_logger()
logger.info("info message")
logger.warn("warn message")
logger.error("error message")
```

L'exemple suivant illustre un script Scala.

```
import com.amazonaws.services.glue.log.GlueLogger

object GlueApp {
  def main(sysArgs: Array[String]) {
    val logger = new GlueLogger
    logger.info("info message")
    logger.warn("warn message")
    logger.error("error message")
  }
}
```

## Activation de la barre de progression pour afficher la progression d’une tâche
<a name="monitor-logging-progress"></a>

AWS Glue fournit une barre de progression en temps réel sous le flux du `JOB_RUN_ID-progress-bar` journal pour vérifier l'état AWS Glue d'exécution des tâches. Actuellement, il prend en charge uniquement les tâches qui initialisent `glueContext`. Si vous exécutez une tâche Spark pure sans l'initialiser`glueContext`, la barre de AWS Glue progression n'apparaît pas.

La barre de progression indique une mise à jour de la progression suivante toutes les 5 secondes.

```
Stage Number (Stage Name): > (numCompletedTasks + numActiveTasks) / totalNumOfTasksInThisStage]
```

## Configuration de sécurité avec Amazon CloudWatch journalisation
<a name="monitor-security-config-logging"></a>

 Lorsqu'une configuration de sécurité est activée pour les Amazon CloudWatch journaux, AWS Glue crée des groupes de journaux avec des modèles de dénomination spécifiques qui incorporent le nom de la configuration de sécurité. 

### Dénomination des groupes de journaux avec configuration de sécurité
<a name="monitor-log-group-naming"></a>

 Les groupes de journaux par défaut et personnalisés seront les suivants : 
+  **Groupe de journaux d’erreurs par défaut :** `/aws-glue/jobs/Security-Configuration-Name-role/glue-job-role/error` 
+  **Groupe de journaux de sortie par défaut :** `/aws-glue/jobs/Security-Configuration-Name-role/glue-job-role/output` 
+  **Groupe de journaux d'erreurs personnalisé (AWS Glue 5.0) :** `custom-log-group-prefix/Security-Configuration-Name-role/glue-job-role/error` 
+  **Groupe de journaux de sortie personnalisé (AWS Glue 5.0) :** `custom-log-group-prefix/Security-Configuration-Name-role/glue-job-role/output` 

### Autorisations IAM nécessaires
<a name="monitor-logging-iam-permissions"></a>

 Vous devez ajouter l’autorisation `logs:AssociateKmsKey` à vos autorisations de rôle IAM, si vous activez une configuration de sécurité avec Amazon CloudWatch Logs. Si cette autorisation n’est pas incluse, la journalisation continue sera désactivée. 

 De plus, pour configurer le chiffrement des Amazon CloudWatch journaux, suivez les instructions de la section [Chiffrer les données des Amazon CloudWatch journaux dans les journaux à l'aide AWS Key Management Service](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/encrypt-log-data-kms.html) du guide de l'utilisateur Amazon Amazon CloudWatch Logs. 

### Informations supplémentaires
<a name="additional-info"></a>

 Pour plus d'informations sur la création de configurations de sécurité, consultez [la section Gestion des configurations de sécurité sur la AWS Glue console](https://docs.aws.amazon.com/glue/latest/dg/console-security-configurations.html). 

**Topics**
+ [Comportement de journalisation en AWS Glue version 5.0](#monitor-logging-behavior-glue-50)
+ [Journalisation personnalisée](#monitor-logging-custom)
+ [Journalisation des messages spécifiques aux applications à l’aide de l’enregistreur de script personnalisé](#monitor-logging-script)
+ [Activation de la barre de progression pour afficher la progression d’une tâche](#monitor-logging-progress)
+ [Configuration de sécurité avec Amazon CloudWatch journalisation](#monitor-security-config-logging)
+ [Activation de la journalisation continue pour les tâches AWS Glue 4.0 et antérieures](monitor-continuous-logging-enable.md)
+ [Afficher les journaux des AWS Glue offres d'emploi](monitor-continuous-logging-view.md)

# Activation de la journalisation continue pour les tâches AWS Glue 4.0 et antérieures
<a name="monitor-continuous-logging-enable"></a>

**Note**  
 Dans les versions AWS Glue 4.0 et antérieures, la journalisation continue était une fonctionnalité disponible. Cependant, avec l'introduction de la AWS Glue version 5.0, toutes les tâches disposent d'une fonctionnalité de journalisation en temps réel. Pour plus de détails sur les fonctionnalités de journalisation et les options de configuration de la AWS Glue version 5.0, consultez la section [Journalisation des AWS Glue tâches](https://docs.aws.amazon.com/glue/latest/dg/monitor-continuous-logging.html). 

Vous pouvez activer la journalisation continue à l'aide de la AWS Glue console ou via le AWS Command Line Interface (AWS CLI). 

Vous pouvez activer la journalisation continue lorsque vous créez une tâche, modifiez une tâche existante, ou vous pouvez l’activer via l’ AWS CLI.

Vous pouvez également spécifier des options de configuration personnalisées telles que le nom du groupe de Amazon CloudWatch journaux, le préfixe du flux de CloudWatch journal avant l' driver/executor ID AWS Glue d'exécution de la tâche et le modèle de conversion des journaux pour les messages de journal. Ces configurations vous permettent de définir des journaux agrégés dans des groupes de CloudWatch journaux personnalisés avec différentes politiques d'expiration, et de les analyser plus en détail à l'aide de préfixes de flux de journaux et de modèles de conversion personnalisés. 

**Topics**
+ [À l'aide du AWS Management Console](#monitor-continuous-logging-enable-console)
+ [Journalisation des messages spécifiques aux applications à l’aide de l’enregistreur de script personnalisé](#monitor-continuous-logging-script)
+ [Activation de la barre de progression pour afficher la progression d’une tâche](#monitor-continuous-logging-progress)
+ [Configuration de sécurité avec la journalisation continue](#monitor-logging-encrypt-log-data)

## À l'aide du AWS Management Console
<a name="monitor-continuous-logging-enable-console"></a>

Procédez comme suit pour utiliser la console afin d'activer la journalisation continue lors de la création ou de la modification d'une AWS Glue tâche.

**Pour créer une nouvelle AWS Glue tâche grâce à la journalisation continue**

1. Connectez-vous à la AWS Glue console AWS Management Console et ouvrez-la à l'adresse [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. Dans le volet de navigation, sélectionnez **Tâches ETL**.

1. Choisissez **ETL visuel**.

1. Dans l’onglet **Détails de la tâche**, développez la section **Propriétés avancées**.

1. Sous **Journalisation continue**, sélectionnez **Activer les connexions CloudWatch**.

**Pour activer la journalisation continue d'une AWS Glue tâche existante**

1. Ouvrez la AWS Glue console à l'adresse [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. Dans le volet de navigation, sélectionnez **Tâches**.

1. Choisissez une tâche existante à partir de la liste des **Tâches**.

1. Choisissez **Action**, **Modifier la tâche**.

1. Dans l’onglet **Détails de la tâche**, développez la section **Propriétés avancées**.

1. Sous **Journalisation continue**, sélectionnez **Activer les connexions CloudWatch**.

### À l'aide du AWS CLI
<a name="monitor-continuous-logging-cli"></a>

Pour activer la journalisation continue, vous devez transmettre les paramètres d'une tâche à une AWS Glue tâche. Transmettez les paramètres de tâche spéciaux suivants, similaires aux autres paramètres de AWS Glue tâche. Pour de plus amples informations, veuillez consulter [Utilisation des paramètres des tâches dans les tâches AWS Glue](aws-glue-programming-etl-glue-arguments.md).

```
'--enable-continuous-cloudwatch-log': 'true'
```

Vous pouvez spécifier un nom de groupe de CloudWatch journaux Amazon personnalisé. Si aucune valeur n’est spécifiée, le nom par défaut du groupe de journaux est `/aws-glue/jobs/logs-v2`.

```
'--continuous-log-logGroup': 'custom_log_group_name'
```

Vous pouvez spécifier un préfixe de flux de CloudWatch journal Amazon personnalisé. Si aucune valeur n’est spécifiée, le préfixe de flux de journal par défaut est l’ID d’exécution du travail.

```
'--continuous-log-logStreamPrefix': 'custom_log_stream_prefix'
```

Vous pouvez spécifier un modèle de conversion de journalisation continue personnalisé. Si aucune valeur n’est spécifiée, le modèle de conversion par défaut est `%d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n`. Notez que le modèle de conversion s’applique uniquement aux journaux des pilotes et des programmes d’exécution. Cela n’affecte pas la barre de progression AWS Glue .

```
'--continuous-log-conversionPattern': 'custom_log_conversion_pattern'
```

## Journalisation des messages spécifiques aux applications à l’aide de l’enregistreur de script personnalisé
<a name="monitor-continuous-logging-script"></a>

Vous pouvez utiliser l' AWS Glue enregistreur pour enregistrer tous les messages spécifiques à l'application dans le script qui sont envoyés en temps réel au flux de journal du pilote.

L'exemple suivant illustre un script Python.

```
from awsglue.context import GlueContext
from pyspark.context import SparkContext

sc = SparkContext()
glueContext = GlueContext(sc)
logger = glueContext.get_logger()
logger.info("info message")
logger.warn("warn message")
logger.error("error message")
```

L'exemple suivant illustre un script Scala.

```
import com.amazonaws.services.glue.log.GlueLogger

object GlueApp {
  def main(sysArgs: Array[String]) {
    val logger = new GlueLogger
    logger.info("info message")
    logger.warn("warn message")
    logger.error("error message")
  }
}
```

## Activation de la barre de progression pour afficher la progression d’une tâche
<a name="monitor-continuous-logging-progress"></a>

AWS Glue fournit une barre de progression en temps réel sous le flux du `JOB_RUN_ID-progress-bar` journal pour vérifier l'état AWS Glue d'exécution des tâches. Actuellement, il prend en charge uniquement les tâches qui initialisent `glueContext`. Si vous exécutez une tâche Spark pure sans l'initialiser`glueContext`, la barre de AWS Glue progression n'apparaît pas.

La barre de progression indique une mise à jour de la progression suivante toutes les 5 secondes.

```
Stage Number (Stage Name): > (numCompletedTasks + numActiveTasks) / totalNumOfTasksInThisStage]
```

## Configuration de sécurité avec la journalisation continue
<a name="monitor-logging-encrypt-log-data"></a>

Si une configuration de sécurité est activée pour CloudWatch les journaux, AWS Glue créera un groupe de journaux nommé comme suit pour les journaux continus :

```
<Log-Group-Name>-<Security-Configuration-Name>
```

Les groupes de journaux par défaut et personnalisés seront les suivants :
+ Le groupe de journaux continus par défaut sera `/aws-glue/jobs/error-<Security-Configuration-Name>`
+ Le groupe de journaux continus personnalisé sera `<custom-log-group-name>-<Security-Configuration-Name>`

Vous devez ajouter les autorisations `logs:AssociateKmsKey` à votre rôle IAM, si vous activez une configuration de sécurité avec CloudWatch Logs. Si cette autorisation n’est pas incluse, la journalisation continue sera désactivée. De plus, pour configurer le chiffrement des CloudWatch journaux, suivez les instructions de la section [Chiffrer les données des CloudWatch journaux dans les journaux à l'aide AWS Key Management Service](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/encrypt-log-data-kms.html) du *guide de l'utilisateur Amazon CloudWatch Logs*.

Pour plus d’informations sur la création de configurations de sécurité, veuillez consulter [Gestion des configurations de sécurité sur la console AWS Glue](console-security-configurations.md).

**Note**  
 Des frais supplémentaires peuvent vous être facturés lorsque vous activez la journalisation et que des événements de CloudWatch journalisation supplémentaires sont créés. Pour plus d'informations, consultez les [ CloudWatch tarifs Amazon](https://aws.amazon.com/cloudwatch/pricing/). 

# Afficher les journaux des AWS Glue offres d'emploi
<a name="monitor-continuous-logging-view"></a>

Vous pouvez consulter les journaux en temps réel à l'aide de la AWS Glue console ou de la CloudWatch console Amazon.

**Pour consulter les journaux en temps réel à l'aide du tableau de bord de AWS Glue la console**

1. Connectez-vous à la AWS Glue console AWS Management Console et ouvrez-la à l'adresse [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. Dans le volet de navigation, sélectionnez **Tâches**.

1. Ajouter ou démarrer une tâche existante. Choisissez **Action**, **Exécuter la tâche**.

   Lorsque vous démarrez l’exécution d’une tâche, vous accédez à une page qui contient des informations sur la tâche en cours d’exécution :
   + L’onglet **Journaux** affiche les journaux des applications agrégés plus anciens.
   + L’onglet **Journaux** affiche une barre de progression en temps réel lorsque la tâche est en cours d’exécution avec `glueContext` initialisé.
   + L'onglet **Logs** contient également les journaux des **pilotes, qui capturent les journaux** des pilotes Apache Spark en temps réel, et les journaux des applications à partir du script enregistré à l'aide de l'enregistreur d' AWS Glue applications lorsque le job est en cours d'exécution.

1. Pour les anciennes tâches, vous pouvez également afficher les journaux en temps réel sous la vue **Job History (Historique des tâches)** en choisissant **Journaux**. Cette action vous amène à la CloudWatch console qui affiche tous les flux de log du pilote Spark, de l'exécuteur et de la barre de progression pour cette tâche exécutée.

**Pour consulter les journaux en temps réel à l'aide du tableau de bord de CloudWatch la console**

1. Ouvrez la CloudWatch console à l'adresse [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Dans le volet de navigation, sélectionnez **Journaux**.

1. Choisissez le groupe de **journaux /aws-glue/jobs/error/**.

1. Dans la zone **Filtre**, collez l’ID d’exécution de la tâche

   Vous pouvez afficher les journaux du pilote, les journaux du programme d’exécution et la barre de progression (si vous utilisez le **Standard filter (Filtre standard)**).

# Surveillance à l'aide de métriques d'observabilité AWS Glue
<a name="monitor-observability"></a>

**Note**  
Les métriques d’observabilité AWS Glue sont disponibles dans AWS Glue 4.0 et les versions ultérieures.

 Utilisez les métriques d'observabilité AWS Glue pour générer des informations sur ce qui se passe au sein de votre AWS Glue pour les tâches Apache Spark afin d'améliorer le triage et l'analyse des problèmes. Les métriques d'observabilité sont visualisées via des tableaux de bord Amazon CloudWatch et peuvent être utilisées pour analyser les causes racines des erreurs et pour diagnostiquer les goulots d'étranglement en matière de performance. Vous pouvez réduire le temps passé à déboguer les problèmes à l'échelle afin de vous concentrer sur leur résolution plus rapide et plus efficace. 

 AWS GlueL'observabilité fournit des Amazon CloudWatch métriques classées dans les quatre groupes suivants : 
+  **Fiabilité (par exemple, classes d'erreurs)** : identifier facilement les motifs d'échec les plus courants sur une plage de temps donnée que vous souhaiterez remédier. 
+  **Performance (par exemple, asymétrie)** : identifier un goulot d'étranglement en matière de performance et appliquer des techniques de réglage. Par exemple, lorsque vos performances sont dégradées en raison de l'asymétrie des tâches, vous pouvez activer l'Exécution adaptative des requêtes Spark et affiner le seuil de jointure asymétrique. 
+  **Débit (c'est-à-dire par source/sink débit)** : surveillez les tendances en matière de lecture et d'écriture de données. Vous pouvez également configurer des Amazon CloudWatch alarmes en cas d'anomalie. 
+  **Utilisation des ressources (c'est-à-dire utilisation du personnel, de la mémoire et du disque)** : trouver de manière efficace les tâches dont l'utilisation des capacités est faible. Vous souhaiterez peut-être activer la mise à l'échelle automatique AWS Glue pour ces tâches. 

## Mise en route avec les métriques d'observabilité AWS Glue
<a name="monitor-observability-getting-started"></a>

**Note**  
 Les nouvelles métriques sont disponibles par défaut dans la console AWS Glue Studio. 

**Pour configurer les métriques d’observabilité dans AWS Glue Studio :**

1. Connectez-vous à la console AWS Glue et choisissez les **tâches ETL** dans le menu de la console.

1. Choisissez une tâche en cliquant sur le nom de la tâche dans la section **Vos tâches**.

1. Sélectionnez l'onglet **Job details** (Détails de la tâche).

1. Faites défiler l'écran vers le bas et choisissez **Propriétés avancées**, puis **Metriques d'observabilité de la tâche**.  
![\[La capture d'écran montre l'onglet Détails de la tâche Propriétés avancées. L'option Metriques d'observabilité de la tâche est mise en surbrillance.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/job-details-observability-metrics.png)

**Pour activer les métriques AWS Glue d'observabilité à l'aide AWS CLI de :**
+  Ajoutez à la carte `--default-arguments` la valeur clé suivante dans le fichier JSON d'entrée : 

  ```
  --enable-observability-metrics, true
  ```

## Utiliser l'observabilité AWS Glue
<a name="monitor-observability-cloudwatch"></a>

 Les métriques AWS Glue d'observabilité étant fournies via Amazon CloudWatch, vous pouvez utiliser la Amazon CloudWatch console AWS CLI, le SDK ou l'API pour interroger les points de données des métriques d'observabilité. Consultez la rubrique [Utilisation de l’observabilité Glue pour surveiller l’utilisation des ressources afin de réduire les coûts](https://aws.amazon.com/blogs/big-data/enhance-monitoring-and-debugging-for-aws-glue-jobs-using-new-job-observability-metrics/) pour un exemple de cas d’utilisation des métriques d’observabilité AWS Glue. 

### Utilisation de l'AWS Glueobservabilité dans la console Amazon CloudWatch
<a name="monitor-observability-cloudwatch-console"></a>

**Pour interroger et visualiser les métriques dans la Amazon CloudWatch console :**

1.  Ouvrez la Amazon CloudWatch console et choisissez **Toutes les mesures**. 

1.  Sous Espaces de noms personnalisés, sélectionnez **AWS Glue**. 

1.  Choisissez les **métriques d'observabilité de la tâche, les métriques d'observabilité par source ou les métriques d'observabilité par récepteur**. 

1. Recherchez le nom de la métrique, le nom de la tâche, l'ID d'exécution de la tâche spécifiques, puis sélectionnez-les.

1. Sous l'onglet **Métriques sous forme de graphique**, configurez vos statistiques, périodes et autres options préférées.  
![\[La capture d'écran montre la Amazon CloudWatch console et le graphique des métriques.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/cloudwatch-console-metrics.png)

**Pour interroger une métrique d'observabilité à l'aide AWS CLI de :**

1.  Créez un fichier JSON de définition de métrique et remplacez `your-Glue-job-name` et `your-Glue-job-run-id` par les vôtres. 

   ```
   $ cat multiplequeries.json
   [
       {
           "Id": "avgWorkerUtil_0",
           "MetricStat": {
               "Metric": {
                   "Namespace": "Glue",
                   "MetricName": "glue.driver.workerUtilization",
                   "Dimensions": [
                       {
                           "Name": "JobName",
                           "Value": "<your-Glue-job-name-A>"
                       },
                       {
                           "Name": "JobRunId",
                           "Value": "<your-Glue-job-run-id-A>"
                       },
                       {
                           "Name": "Type",
                           "Value": "gauge"
                       },
                       {
                           "Name": "ObservabilityGroup",
                           "Value": "resource_utilization"
                       }
                   ]
               },
               "Period": 1800,
               "Stat": "Minimum",
               "Unit": "None"
           }
       },
       {
           "Id": "avgWorkerUtil_1",
           "MetricStat": {
               "Metric": {
                   "Namespace": "Glue",
                   "MetricName": "glue.driver.workerUtilization",
                   "Dimensions": [
                       {
                           "Name": "JobName",
                           "Value": "<your-Glue-job-name-B>"
                       },
                       {
                           "Name": "JobRunId",
                           "Value": "<your-Glue-job-run-id-B>"
                       },
                       {
                           "Name": "Type",
                           "Value": "gauge"
                       },
                       {
                           "Name": "ObservabilityGroup",
                           "Value": "resource_utilization"
                       }
                   ]
               },
               "Period": 1800,
               "Stat": "Minimum",
               "Unit": "None"
           }
       }
   ]
   ```

1.  Exécutez la commande `get-metric-data` : 

   ```
   $ aws cloudwatch get-metric-data --metric-data-queries file: //multiplequeries.json \
        --start-time '2023-10-28T18: 20' \
        --end-time '2023-10-28T19: 10'  \
        --region us-east-1
   {
       "MetricDataResults": [
           {
               "Id": "avgWorkerUtil_0",
               "Label": "<your-label-for-A>",
               "Timestamps": [
                   "2023-10-28T18:20:00+00:00"
               ],
               "Values": [
                   0.06718750000000001
               ],
               "StatusCode": "Complete"
           },
           {
               "Id": "avgWorkerUtil_1",
               "Label": "<your-label-for-B>",
               "Timestamps": [
                   "2023-10-28T18:50:00+00:00"
               ],
               "Values": [
                   0.5959183673469387
               ],
               "StatusCode": "Complete"
           }
       ],
       "Messages": []
   }
   ```

## Métriques d'observabilité
<a name="monitor-observability-metrics-definitions"></a>

 AWS GlueL'observabilité établit des profils et envoie les métriques suivantes Amazon CloudWatch toutes les 30 secondes, et certaines de ces métriques peuvent être visibles sur la page de surveillance des AWS Glue Studio Job Runs. 


| Métrique | Description | Catégorie | 
| --- | --- | --- | 
| glue.driver.skewness.stage |  Catégorie de métrique : job\$1performance L’asymétrie d’exécution des étapes Spark : cette métrique indique la durée maximale d’une tâche à une étape donnée par rapport à la durée médiane d’une tâche à cette étape. Elle capture l’asymétrie d’exécution, qui peut être causée par une asymétrie des données d’entrée ou par une transformation (par exemple, une jointure asymétrique). Les valeurs de cette métrique se situent dans l’intervalle [0, infini], où 0 signifie que le rapport entre le temps d’exécution maximum et médian des tâches, parmi toutes les tâches de l’étape, est inférieur à un certain facteur d’asymétrie d’étape. Le facteur d’asymétrie d’étape par défaut est « 5 » et il peut être modifié via la configuration Spark : spark.metrics.conf.driver.source.glue.jobPerformance.skewnessFactor Une valeur d’asymétrie d’étape de 1 signifie que le rapport est le double du facteur d’asymétrie d’étape.  La valeur de l’asymétrie d’étape est mise à jour toutes les 30 secondes pour refléter l’asymétrie actuelle. La valeur en fin d’étape reflète l’asymétrie finale de l’étape. Cette métrique au niveau de l’étape est utilisée pour calculer la métrique `glue.driver.skewness.job` au niveau de la tâche. Dimensions valides : JobName (le nom du AWS Glue Job), JobRunId (l' JobRun ID ou ALL), le type (gauge) et ObservabilityGroup (job\$1performance) Statistiques valides : moyenne, maximum, minimum, centile Unité : nombre  | job\$1performance | 
| glue.driver.skewness.job |  Catégorie de métrique : job\$1performance  L’asymétrie de la tâche est le maximum de l’asymétrie pondérée de toutes les étapes. L’asymétrie d’étape (glue.driver.skewness.stage) est pondérée en fonction de la durée de l’étape. Cela permet d’éviter le cas particulier où une étape très asymétrique s’exécute en réalité pendant un temps très court par rapport aux autres étapes (et donc son asymétrie n’est pas significative pour la performance globale de la tâche et ne mérite pas l’effort de tenter de la corriger).  Cette métrique est mise à jour à la fin de chaque étape. La dernière valeur reflète donc l’asymétrie globale réelle de la tâche. Dimensions valides : JobName (le nom du AWS Glue Job), JobRunId (l' JobRun ID ou ALL), le type (gauge) et ObservabilityGroup (job\$1performance) Statistiques valides : moyenne, maximum, minimum, centile Unité : nombre  | job\$1performance | 
| glue.succeed.ALL |  Catégorie de métrique : erreur Nombre total d’exécutions de tâches réussies, pour compléter le tableau des catégories d’échec Dimensions valides : JobName (le nom du AWS Glue Job), JobRunId (l' JobRun ID ou ALL), le type (nombre) et ObservabilityGroup (erreur) Statistiques valides : SUM Unité : nombre  | error | 
| glue.error.ALL |  Catégorie de métrique : erreur  Nombre total d’erreurs d’exécution de tâche, pour compléter le tableau des catégories d’échec Dimensions valides : JobName (le nom du AWS Glue Job), JobRunId (l' JobRun ID ou ALL), le type (nombre) et ObservabilityGroup (erreur) Statistiques valides : SUM Unité : nombre  | error | 
| glue.error.[error category] |  Catégorie de métrique : erreur  Il s’agit en fait d’un ensemble de métriques, qui sont mises à jour uniquement lorsqu’une exécution de tâche échoue. La catégorisation des erreurs facilite le triage et le débogage. Lorsqu’une exécution de tâche échoue, l’erreur à l’origine de l’échec est catégorisée et la métrique de la catégorie d’erreur correspondante est définie à 1. Cela permet d’effectuer une analyse des échecs au fil du temps, ainsi qu’une analyse des erreurs sur l’ensemble des tâches, afin d’identifier les catégories d’échec les plus courantes et de commencer à y remédier. AWS Glue compte 28 catégories d’erreur, dont OUT\$1OF\$1MEMORY (manque de mémoire) (pilote et exécuteur), PERMISSION (autorisation), SYNTAX (syntaxe) et THROTTLING (limitation). Les catégories d’erreur incluent également les catégories d’erreur COMPILATION, LAUNCH et TIMEOUT. Dimensions valides : JobName (le nom du AWS Glue Job), JobRunId (l' JobRun ID ou ALL), le type (nombre) et ObservabilityGroup (erreur) Statistiques valides : SUM Unité : nombre  | error | 
| glue.driver.workerUtilization |  Catégorie de métrique : resource\$1utilization  Le pourcentage des travailleurs affectés qui sont réellement utilisés. Si ce n’est pas bon, l’autoscaling peut vous aider. Dimensions valides : JobName (le nom du AWS Glue Job), JobRunId (l' JobRun ID ou ALL), le type (gauge) et ObservabilityGroup (resource\$1utilization) Statistiques valides : moyenne, maximum, minimum, centile Unité : pourcentage  | resource\$1utilization | 
| glue.driver.memory.heap.[available \$1 used] |  Catégorie de métrique : resource\$1utilization  Tas disponible/utilisé par le pilote pendant l’exécution de la tâche. Cela aide à comprendre les tendances d’utilisation de la mémoire, particulièrement au fil du temps, ce qui peut contribuer à éviter des échecs potentiels, en plus de déboguer les échecs liés à la mémoire. Dimensions valides : JobName (le nom du AWS Glue Job), JobRunId (l' JobRun ID ou ALL), le type (gauge) et ObservabilityGroup (resource\$1utilization) Statistiques valides : moyenne Unité : octets  | resource\$1utilization | 
| glue.driver.memory.heap.used.percentage |  Catégorie de métrique : resource\$1utilization  Tas utilisé (%) par le pilote pendant l’exécution de la tâche. Cela aide à comprendre les tendances d’utilisation de la mémoire, particulièrement au fil du temps, ce qui peut contribuer à éviter des échecs potentiels, en plus de déboguer les échecs liés à la mémoire. Dimensions valides : JobName (le nom du AWS Glue Job), JobRunId (l' JobRun ID ou ALL), le type (gauge) et ObservabilityGroup (resource\$1utilization) Statistiques valides : moyenne Unité : pourcentage  | resource\$1utilization | 
| glue.driver.memory.non-heap.[available \$1 used] |  Catégorie de métrique : resource\$1utilization  Mémoire hors tas disponible/utilisée par le pilote pendant l’exécution de la tâche. Cela aide à comprendre les tendances d’utilisation de la mémoire, particulièrement au fil du temps, ce qui peut contribuer à éviter des échecs potentiels, en plus de déboguer les échecs liés à la mémoire. Dimensions valides : JobName (le nom du AWS Glue Job), JobRunId (l' JobRun ID ou ALL), le type (gauge) et ObservabilityGroup (resource\$1utilization) Statistiques valides : moyenne Unité : octets  | resource\$1utilization | 
| glue.driver.memory.non-heap.used.percentage |  Catégorie de métrique : resource\$1utilization  Mémoire hors tas utilisée (%) par le pilote pendant l’exécution de la tâche. Cela aide à comprendre les tendances d’utilisation de la mémoire, particulièrement au fil du temps, ce qui peut contribuer à éviter des échecs potentiels, en plus de déboguer les échecs liés à la mémoire. Dimensions valides : JobName (le nom du AWS Glue Job), JobRunId (l' JobRun ID ou ALL), le type (gauge) et ObservabilityGroup (resource\$1utilization) Statistiques valides : moyenne Unité : pourcentage  | resource\$1utilization | 
| glue.driver.memory.total.[available \$1 used] |  Catégorie de métrique : resource\$1utilization  Mémoire totale disponible/utilisée par le pilote pendant l’exécution de la tâche. Cela aide à comprendre les tendances d’utilisation de la mémoire, particulièrement au fil du temps, ce qui peut contribuer à éviter des échecs potentiels, en plus de déboguer les échecs liés à la mémoire. Dimensions valides : JobName (le nom du AWS Glue Job), JobRunId (l' JobRun ID ou ALL), le type (gauge) et ObservabilityGroup (resource\$1utilization) Statistiques valides : moyenne Unité : octets  | resource\$1utilization | 
| glue.driver.memory.total.used.percentage |  Catégorie de métrique : resource\$1utilization  Mémoire totale utilisée (%) par le pilote pendant l’exécution de la tâche. Cela aide à comprendre les tendances d’utilisation de la mémoire, particulièrement au fil du temps, ce qui peut contribuer à éviter des échecs potentiels, en plus de déboguer les échecs liés à la mémoire. Dimensions valides : JobName (le nom du AWS Glue Job), JobRunId (l' JobRun ID ou ALL), le type (gauge) et ObservabilityGroup (resource\$1utilization) Statistiques valides : moyenne Unité : pourcentage  | resource\$1utilization | 
| glue.ALL.memory.heap.[available \$1 used] |  Catégorie de métrique : resource\$1utilization  Le tas de mémoire des exécuteurs testamentaires available/used . ALL signifie tous les exécuteurs. Dimensions valides : JobName (le nom du AWS Glue Job), JobRunId (l' JobRun ID ou ALL), le type (gauge) et ObservabilityGroup (resource\$1utilization) Statistiques valides : moyenne Unité : octets  | resource\$1utilization | 
| glue.ALL.memory.heap.used.percentage |  Catégorie de métrique : resource\$1utilization  Tas utilisé (%) par les exécuteurs. ALL signifie tous les exécuteurs. Dimensions valides : JobName (le nom du AWS Glue Job), JobRunId (l' JobRun ID ou ALL), le type (gauge) et ObservabilityGroup (resource\$1utilization) Statistiques valides : moyenne Unité : pourcentage  | resource\$1utilization | 
| glue.ALL.memory.non-heap.[available \$1 used] |  Catégorie de métrique : resource\$1utilization  La mémoire available/used hors tas des exécuteurs. ALL signifie tous les exécuteurs. Dimensions valides : JobName (le nom du AWS Glue Job), JobRunId (l' JobRun ID ou ALL), le type (gauge) et ObservabilityGroup (resource\$1utilization) Statistiques valides : moyenne Unité : octets  | resource\$1utilization | 
| glue.ALL.memory.non-heap.used.percentage |  Catégorie de métrique : resource\$1utilization  Mémoire hors tas /utilisée (%) par les exécuteurs. ALL signifie tous les exécuteurs. Dimensions valides : JobName (le nom du AWS Glue Job), JobRunId (l' JobRun ID ou ALL), le type (gauge) et ObservabilityGroup (resource\$1utilization) Statistiques valides : moyenne Unité : pourcentage  | resource\$1utilization | 
| glue.ALL.memory.total.[available \$1 used] |  Catégorie de métrique : resource\$1utilization  Mémoire available/used totale des exécuteurs. ALL signifie tous les exécuteurs. Dimensions valides : JobName (le nom du AWS Glue Job), JobRunId (l' JobRun ID ou ALL), le type (gauge) et ObservabilityGroup (resource\$1utilization) Statistiques valides : moyenne Unité : octets  | resource\$1utilization | 
| glue.ALL.memory.total.used.percentage |  Catégorie de métrique : resource\$1utilization  Mémoire totale utilisée (%) par les exécuteurs. ALL signifie tous les exécuteurs. Dimensions valides : JobName (le nom du AWS Glue Job), JobRunId (l' JobRun ID ou ALL), le type (gauge) et ObservabilityGroup (resource\$1utilization) Statistiques valides : moyenne Unité : pourcentage  | resource\$1utilization | 
| glue.driver.disk.[available\$1GB \$1 used\$1GB] |  Catégorie de métrique : resource\$1utilization  L'espace available/used disque du pilote pendant l'exécution de la tâche. Cela aide à comprendre les tendances d’utilisation du disque, particulièrement au fil du temps, ce qui peut contribuer à éviter des échecs potentiels, en plus de déboguer les échecs liés à un espace disque insuffisant. Dimensions valides : JobName (le nom du AWS Glue Job), JobRunId (l' JobRun ID ou ALL), le type (gauge) et ObservabilityGroup (resource\$1utilization) Statistiques valides : moyenne Unité : gigaoctets  | resource\$1utilization | 
| glue.driver.disk.used.percentage] |  Catégorie de métrique : resource\$1utilization  L'espace available/used disque du pilote pendant l'exécution de la tâche. Cela aide à comprendre les tendances d’utilisation du disque, particulièrement au fil du temps, ce qui peut contribuer à éviter des échecs potentiels, en plus de déboguer les échecs liés à un espace disque insuffisant. Dimensions valides : JobName (le nom du AWS Glue Job), JobRunId (l' JobRun ID ou ALL), le type (gauge) et ObservabilityGroup (resource\$1utilization) Statistiques valides : moyenne Unité : pourcentage  | resource\$1utilization | 
| glue.ALL.disk.[available\$1GB \$1 used\$1GB] |  Catégorie de métrique : resource\$1utilization  L' available/used espace disque des exécuteurs. ALL signifie tous les exécuteurs. Dimensions valides : JobName (le nom du AWS Glue Job), JobRunId (l' JobRun ID ou ALL), le type (gauge) et ObservabilityGroup (resource\$1utilization) Statistiques valides : moyenne Unité : gigaoctets  | resource\$1utilization | 
| glue.ALL.disk.used.percentage |  Catégorie de métrique : resource\$1utilization  Espace disque available/used/used (%) des exécuteurs. ALL signifie tous les exécuteurs. Dimensions valides : JobName (le nom du AWS Glue Job), JobRunId (l' JobRun ID ou ALL), le type (gauge) et ObservabilityGroup (resource\$1utilization) Statistiques valides : moyenne Unité : pourcentage  | resource\$1utilization | 
| glue.driver.bytesRead |  Catégorie de métrique : débit  Nombre d’octets lus par source d’entrée lors de cette exécution de tâche, ainsi que pour TOUTES les sources. Cela aide à comprendre le volume de données et ses variations au fil du temps, ce qui est utile pour résoudre des problèmes tels que l’asymétrie des données. Dimensions valides : JobName (le nom du AWS Glue Job), JobRunId (l' JobRun ID ou ALL), le type (jauge), ObservabilityGroup (resource\$1utilization) et la source (emplacement des données source) Statistiques valides : moyenne Unité : octets  | débit | 
| glue.driver.[recordsRead \$1 filesRead]  |  Catégorie de métrique : débit  Le nombre de records/files lectures par source d'entrée dans ce travail exécuté, ainsi que pour TOUTES les sources. Cela aide à comprendre le volume de données et ses variations au fil du temps, ce qui est utile pour résoudre des problèmes tels que l’asymétrie des données. Dimensions valides : JobName (le nom du AWS Glue Job), JobRunId (l' JobRun ID ou ALL), le type (jauge), ObservabilityGroup (resource\$1utilization) et la source (emplacement des données source) Statistiques valides : moyenne Unité : nombre  | débit | 
| glue.driver.partitionsRead  |  Catégorie de métrique : débit  Nombre de partitions lues par source d’entrée Amazon S3 dans cette exécution de tâche, ainsi que pour TOUTES les sources. Dimensions valides : JobName (le nom du AWS Glue Job), JobRunId (l' JobRun ID ou ALL), le type (jauge), ObservabilityGroup (resource\$1utilization) et la source (emplacement des données source) Statistiques valides : moyenne Unité : nombre  | débit | 
| glue.driver.bytesWrittten |  Catégorie de métrique : débit  Nombre d’octets écrits par récepteur de sortie dans cette exécution de tâche, ainsi que pour TOUS les récepteurs. Cela aide à comprendre le volume de données et son évolution au fil du temps, ce qui est utile pour résoudre des problèmes tels que l’asymétrie de traitement. Dimensions valides : JobName (nom du AWS Glue Job), JobRunId (l' JobRun ID ou ALL), Type (gauge), (resource\$1utilization) et Sink ObservabilityGroup (emplacement des données du récepteur) Statistiques valides : moyenne Unité : octets  | débit | 
| glue.driver.[recordsWritten \$1 filesWritten] |  Catégorie de métrique : débit  Le nombre de récepteurs records/files écrits par récepteur de sortie lors de cette exécution de travail, ainsi que pour TOUS les récepteurs. Cela aide à comprendre le volume de données et son évolution au fil du temps, ce qui est utile pour résoudre des problèmes tels que l’asymétrie de traitement. Dimensions valides : JobName (nom du AWS Glue Job), JobRunId (l' JobRun ID ou ALL), Type (gauge), (resource\$1utilization) et Sink ObservabilityGroup (emplacement des données du récepteur) Statistiques valides : moyenne Unité : nombre  | débit | 

## Catégories d’erreur
<a name="monitor-observability-error-categories"></a>


| Catégories d’erreur | Description | 
| --- | --- | 
| COMPILATION\$1ERROR | Des erreurs surviennent lors de la compilation du code Scala. | 
| CONNECTION\$1ERROR | Des erreurs se produisent lors de la connexion à un service/remote hébergeur ou à un service de base de données, etc. | 
| DISK\$1NO\$1SPACE\$1ERROR |  Des erreurs surviennent lorsqu’il n’y a plus d’espace disponible sur le disque du pilote/de l’exécuteur.  | 
| OUT\$1OF\$1MEMORY\$1ERROR | Des erreurs surviennent lorsqu’il n’y a plus d’espace disponible dans la mémoire du pilote/de l’exécuteur. | 
| IMPORT\$1ERROR | Des erreurs surviennent lors de l’importation de dépendances. | 
| INVALID\$1ARGUMENT\$1ERROR | Des erreurs surviennent lorsque les arguments d’entrée ne sont pas valides/sont illégaux. | 
| PERMISSION\$1ERROR | Les erreurs surviennent en cas d’absence d’autorisation d’accès au service, aux données, etc.  | 
| RESOURCE\$1NOT\$1FOUND\$1ERROR |  Des erreurs surviennent lorsque les données, l’emplacement, etc. ne sont pas disponibles.   | 
| QUERY\$1ERROR | Des erreurs surviennent lors de l’exécution de requêtes SQL dans Spark.  | 
| SYNTAX\$1ERROR | Des erreurs surviennent lorsqu’il y a une erreur de syntaxe dans le script.  | 
| THROTTLING\$1ERROR | Des erreurs surviennent lorsqu’une limite de simultanéité de service est atteinte ou qu’une limitation de quota de service est dépassée. | 
| DATA\$1LAKE\$1FRAMEWORK\$1ERROR | Des erreurs surviennent à partir d’un environnement de lac de données pris en charge nativement par AWS Glue, comme Hudi, Iceberg, etc. | 
| UNSUPPORTED\$1OPERATION\$1ERROR | Des erreurs surviennent lors d’une opération non prise en charge. | 
| RESOURCES\$1ALREADY\$1EXISTS\$1ERROR | Des erreurs surviennent lorsqu’une ressource à créer ou à ajouter existe déjà. | 
| GLUE\$1INTERNAL\$1SERVICE\$1ERROR | Les erreurs surviennent lorsqu’il y a un problème de service interne de AWS Glue.  | 
| GLUE\$1OPERATION\$1TIMEOUT\$1ERROR | Des erreurs surviennent lorsqu’une opération AWS Glue dépasse le délai imparti. | 
| GLUE\$1VALIDATION\$1ERROR | Des erreurs surviennent lorsqu’une valeur requise ne peut pas être validée pour la tâche AWS Glue. | 
| GLUE\$1JOB\$1BOOKMARK\$1VERSION\$1MISMATCH\$1ERROR | Des erreurs surviennent lorsque le même job exécute le même bucket source et écrit simultanément sur la same/different destination (simultanéité >1) | 
| LAUNCH\$1ERROR | Des erreurs surviennent lors de la phase de lancement de la tâche AWS Glue. | 
| DYNAMODB\$1ERROR | Les erreurs génériques proviennent du Amazon DynamoDB service. | 
| GLUE\$1ERROR | Les erreurs génériques proviennent du service AWS Glue. | 
| LAKEFORMATION\$1ERROR | Les erreurs génériques proviennent du AWS Lake Formation service. | 
| REDSHIFT\$1ERROR | Les erreurs génériques proviennent du Amazon Redshift service. | 
| S3\$1ERROR | Les erreurs génériques proviennent du service Amazon S3. | 
| SYSTEM\$1EXIT\$1ERROR | Erreur de sortie du système générique. | 
| TIMEOUT\$1ERROR | Des erreurs génériques surviennent lorsque la tâche échoue en raison du dépassement du délai d’exécution de l’opération. | 
| UNCLASSIFIED\$1SPARK\$1ERROR | Les erreurs génériques proviennent de Spark. | 
| UNCLASSIFIED\$1ERROR | Catégorie d’erreur par défaut. | 

## Limitations
<a name="monitoring-observability-limitations"></a>

**Note**  
`glueContext` doit être initialisé pour publier les métriques.

 Dans la dimension source, la valeur est soit le chemin Amazon S3, soit le nom de la table, selon le type de source. En outre, si la source est JDBC et que l’option de requête est utilisée, la chaîne de requête est définie dans la dimension source. Si la valeur est supérieure à 500 caractères, elle est réduite à 500  caractères maximum. Les limites de la valeur sont les suivantes : 
+ Les caractères non ASCII seront supprimés.
+ Si le nom de la source ne contient aucun caractère ASCII, il est converti en <non-ASCII input>.

### Limites et considérations relatives aux métriques de débit
<a name="monitoring-observability-considerations"></a>
+  DataFrame et DataFrame basés DynamicFrame (par exemple JDBC, lecture depuis parquet sur Amazon S3) sont pris en charge, mais les fichiers basés sur RDD DynamicFrame (par exemple, lecture de csv, de json sur Amazon S3, etc.) ne sont pas pris en charge. Techniquement, toutes les lectures et écritures visibles sur l’interface utilisateur de Spark sont prises en charge. 
+  La métrique `recordsRead` sera émise si la source de données est une table de catalogue et que le format est JSON, CSV, texte ou Iceberg. 
+  Les métriques `glue.driver.throughput.recordsWritten`, `glue.driver.throughput.bytesWritten` et `glue.driver.throughput.filesWritten` ne sont pas disponibles dans les tables JDBC et Iceberg. 
+  Les métriques peuvent être retardées. Si le travail se termine dans environ une minute, il se peut qu'il n'y ait aucune métrique de débit dans Amazon CloudWatch Metrics. 

# Surveillance et débogage des tâches
<a name="monitor-profile-glue-job-cloudwatch-metrics"></a>

Vous pouvez collecter des statistiques sur les AWS Glue offres d'emploi et les visualiser sur les AWS Glue CloudWatch consoles Amazon afin d'identifier et de résoudre les problèmes. Le profilage de vos tâches AWS Glue requiert les étapes suivantes :

1.  Activation des métriques : 

   1.  Activer l'option de **métriques de tâche** dans la définition de la tâche. Vous pouvez activer le profilage dans la console AWS Glue ou en tant que paramètre de la tâche. Pour plus d'informations, consultez [Définition des propriétés des tâches Spark](add-job.md#create-job) ou [Utilisation des paramètres des tâches dans les tâches AWS Glue](aws-glue-programming-etl-glue-arguments.md). 

   1.  Activez l’option **Métriques d’observabilité AWS Glue** dans la définition de la tâche. Vous pouvez activer l’observabilité dans la console AWS Glue ou en tant que paramètre de la tâche. Pour de plus amples informations, veuillez consulter [Surveillance à l'aide de métriques d'observabilité AWS Glue](monitor-observability.md). 

1. Vérifiez que le script de la tâche initialise un `GlueContext`. Par exemple, l'extrait de script suivant initialise un `GlueContext` et indique où le code profilé est placé dans le script. Ce format général est utilisé dans les scénarios de débogage suivants. 

   ```
   import sys
   from awsglue.transforms import *
   from awsglue.utils import getResolvedOptions
   from pyspark.context import SparkContext
   from awsglue.context import GlueContext
   from awsglue.job import Job
   import time
   
   ## @params: [JOB_NAME]
   args = getResolvedOptions(sys.argv, ['JOB_NAME'])
   
   sc = SparkContext()
   glueContext = GlueContext(sc)
   spark = glueContext.spark_session
   job = Job(glueContext)
   job.init(args['JOB_NAME'], args)
   
   ...
   ...
   code-to-profile
   ...
   ...
   
   
   job.commit()
   ```

1. Exécutez la tâche.

1. Visualisez les métriques :

   1. Visualisez les métriques sur la console AWS Glue et identifiez les métriques anormales pour le pilote ou un exécuteur.

   1. Consultez les indicateurs d'observabilité sur la page de surveillance des tâches, sur la page des détails de l'exécution des tâches ou sur Amazon CloudWatch. Pour de plus amples informations, veuillez consulter [Surveillance à l'aide de métriques d'observabilité AWS Glue](monitor-observability.md).

1. Précisez la cause première à l'aide de la métrique identifiée.

1. Confirmez éventuellement la cause première à l'aide du flux de journaux du pilote identifié ou du programme d'exécution.

 **Cas d’utilisation des métriques d’observabilité AWS Glue** 
+  [Débogage des exceptions OOM et des anomalies de tâches](monitor-profile-debug-oom-abnormalities.md) 
+  [Débogage d'étapes exigeantes et de tâches de ralentissement](monitor-profile-debug-straggler.md) 
+  [Surveillance de la progression des tâches multiples](monitor-debug-multiple.md) 
+  [Surveillance de la planification des capacités de DPU](monitor-debug-capacity.md) 
+  [Utilisation de l’observabilité AWS Glue pour surveiller l’utilisation des ressources afin de réduire les coûts](https://aws.amazon.com/blogs/big-data/enhance-monitoring-and-debugging-for-aws-glue-jobs-using-new-job-observability-metrics) 

# Débogage des exceptions OOM et des anomalies de tâches
<a name="monitor-profile-debug-oom-abnormalities"></a>

Vous pouvez déboguer les exceptions out-of-memory (OOM) et les anomalies de tâches dans. AWS Glue Les sections suivantes décrivent les scénarios de débogage des out-of-memory exceptions du pilote Apache Spark ou d'un exécuteur Spark. 
+ [Débogage d'un pilote d'exception OOM](#monitor-profile-debug-oom-driver)
+ [Débogage d'un programme d’exécution d'exception OOM](#monitor-profile-debug-oom-executor)

## Débogage d'un pilote d'exception OOM
<a name="monitor-profile-debug-oom-driver"></a>

Dans ce scénario, une tâche Spark lit un grand nombre de petits fichiers d'Amazon Simple Storage Service (Amazon S3). Il convertit les fichiers au format Apache Parquet, puis les écrit dans Amazon S3. Le pilote Spark manque de mémoire. Les données d'entrées Amazon S3 comptent plus d'un million de fichiers dans différentes partitions Amazon S3. 

Le code profilé est le suivant :

```
data = spark.read.format("json").option("inferSchema", False).load("s3://input_path")
data.write.format("parquet").save(output_path)
```

### Visualisez les métriques profilées sur la console AWS Glue
<a name="monitor-debug-oom-visualize"></a>

Le graphique suivant illustre l'utilisation de la mémoire sous forme de pourcentage pour le pilote et les programmes d'exécution. Cette utilisation est déterminée par un point de données qui est moyenné sur les valeurs rapportées au cours de la dernière minute. Vous pouvez voir dans le profil de la mémoire de la tâche que le [pilote de la mémoire](monitoring-awsglue-with-cloudwatch-metrics.md#glue.driver.jvm.heap.usage) dépasse le seuil de sécurité de 50 % d'utilisation rapidement. D'autre part, l' [utilisation moyenne de la mémoire](monitoring-awsglue-with-cloudwatch-metrics.md#glue.ALL.jvm.heap.usage) sur l'ensemble des programmes d'exécution reste inférieure à 4 %. Ceci montre clairement l'anomalie de l'exécution du pilote dans cette tâche Spark. 

![\[L' utilisation de la mémoire (en %) pour le pilote et les programmes d'exécution.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/monitor-debug-oom-memoryprofile.png)


L'exécution de la tâche ne tarde pas à échouer et l'erreur suivante apparaît dans l'onglet **Historique** de la console AWS Glue : Command Failed with Exit Code 1. Cette chaîne d'erreur signifie que la tâche a échoué en raison d'une erreur systémique ; dans le cas présent, le pilote manque de mémoire.

![\[Le message d'erreur affiché sur la console AWS Glue.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/monitor-debug-oom-errorstring.png)


Sur la console, cliquez sur le lien **Journaux d'erreurs** dans **l'onglet Historique** pour confirmer les conclusions relatives au pilote OOM contenues dans les CloudWatch journaux. Recherchez « **Error** » dans les journaux d'erreurs de la tâche pour vérifier que c'est bien à cause d'une exception OOM que la tâche a échoué :

```
# java.lang.OutOfMemoryError: Java heap space
# -XX:OnOutOfMemoryError="kill -9 %p"
# Executing /bin/sh -c "kill -9 12039"...
```

Dans l'onglet **Historique** de la tâche, choisissez **Journaux**. Vous pouvez trouver la trace suivante de l'exécution du pilote dans les CloudWatch journaux au début de la tâche. Le pilote Spark essaie de répertorier tous les fichiers dans tous les répertoires, il génère un `InMemoryFileIndex`et lance une tâche par fichier. Par conséquent, le pilote Spark doit conserver une grande quantité d'état en mémoire pour suivre toutes les tâches. Il met en cache une liste complète comprenant un grand nombre de fichiers pour l'index en mémoire, ce qui se traduit par un pilote OOM.

### Corriger le traitement de fichiers multiples grâce au regroupement
<a name="monitor-debug-oom-fix"></a>

Vous pouvez corriger le traitement de plusieurs fichiers en utilisant la fonction de *regroupement* dans AWS Glue. Le regroupement est automatiquement activé lorsque vous utilisez des images dynamiques et lorsque l'ensemble des données d'entrée compte un grand nombre de fichiers (plus de 50 000). Le regroupement vous permet de fusionner plusieurs fichiers en un groupe, et il permet à une tâche de traiter l'ensemble du groupe plutôt qu'un seul fichier. Par conséquent, le pilote Spark stocke nettement moins d'état en mémoire pour suivre moins de tâches. Pour plus d'informations sur l'activation manuelle du regroupement pour votre ensemble de données, consultez [Lecture des fichiers en entrée dans des groupes de plus grande taille](grouping-input-files.md).

Pour consulter le profil de la mémoire de la tâche AWS Glue, profilez le code suivant avec la fonction de regroupement activée :

```
df = glueContext.create_dynamic_frame_from_options("s3", {'paths': ["s3://input_path"], "recurse":True, 'groupFiles': 'inPartition'}, format="json")
datasink = glueContext.write_dynamic_frame.from_options(frame = df, connection_type = "s3", connection_options = {"path": output_path}, format = "parquet", transformation_ctx = "datasink")
```

Vous pouvez surveiller le profil de la mémoire et le déplacement des données ETL dans le profil AWS Glue de la tâche.

Le pilote s'exécute sous le seuil de 50 % d'utilisation de la mémoire sur toute la durée de la tâche AWS Glue. Les programmes d'exécution diffusent des données depuis Amazon S3, les traitent et les écrivent dans Amazon S3. Par conséquent, ils consomment moins de 5 % de mémoire, quel que soit le moment.

![\[Le profil de la mémoire affichant que le problème est résolu.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/monitor-debug-oom-memoryprofile-fixed.png)


Le profil de déplacement des données ci-dessous montre le nombre total d'octets d'Amazon S3 [lus](monitoring-awsglue-with-cloudwatch-metrics.md#glue.ALL.s3.filesystem.read_bytes) et [écrits](monitoring-awsglue-with-cloudwatch-metrics.md#glue.ALL.s3.filesystem.write_bytes) au cours de la dernière minute par tous les programmes d'exécution à mesure que la tâche progresse. Les deux suivent un modèle similaire car les données sont diffusées sur tous les programmes d'exécution. La tâche finir de traiter le million de fichiers en moins de trois heures.

![\[Le profil de déplacement des données affichant que le problème est résolu.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/monitor-debug-oom-etlmovement.png)


## Débogage d'un programme d’exécution d'exception OOM
<a name="monitor-profile-debug-oom-executor"></a>

Dans ce scénario, vous pouvez apprendre à déboguer des exceptions OOM pouvant se produire dans les programmes d'exécution d'Apache Spark. Le code suivant utilise le lecteur MySQL Spark pour lire une grande table d'environ 34 millions de lignes dans une tramedonnées Spark. Il l'écrit ensuite sur Amazon S3 au format Parquet. Vous pouvez fournir les propriétés de connexion et utiliser les configurations Spark par défaut pour lire la table.

```
val connectionProperties = new Properties()
connectionProperties.put("user", user)
connectionProperties.put("password", password)
connectionProperties.put("Driver", "com.mysql.jdbc.Driver")
val sparkSession = glueContext.sparkSession
val dfSpark = sparkSession.read.jdbc(url, tableName, connectionProperties)
dfSpark.write.format("parquet").save(output_path)
```

### Voir les métriques profilées sur la console AWS Glue
<a name="monitor-debug-oom-visualize-2"></a>

Si la pente du graphique d'utilisation de la mémoire est positive et dépasse 50 %, si la tâche échoue avant l'émission de la métrique suivante, l'épuisement de la mémoire peut en être à l’origine. Le graphique suivant montre qu'en une minute d'exécution, l'[utilisation moyenne de la mémoire](monitoring-awsglue-with-cloudwatch-metrics.md#glue.ALL.jvm.heap.usage) sur tous les programmes d'exécution dépasse rapidement 50 %. L'utilisation peut atteindre 92 % et le conteneur qui exécute le programme d'exécution est arrêté par Apache Hadoop YARN. 

![\[L'utilisation moyenne de la mémoire sur tous les programmes d'exécution.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/monitor-debug-oom-2-memoryprofile.png)


Comme le montre le graphique suivant, un [programme d'exécution unique](monitoring-awsglue-with-cloudwatch-metrics.md#glue.driver.ExecutorAllocationManager.executors.numberAllExecutors) s'exécute toujours jusqu'à ce que la tâche échoue. En effet, un nouveau programme d'exécution est lancé pour remplacer celui qui a été arrêté. Les lectures de la source de données JDBC ne sont pas parallélisées par défaut, car cela nécessiterait le partitionnement de la table sur une colonne et d'ouvrir plusieurs connexions. Par conséquent, seul un programme d'exécution lit dans la table complète de manière séquentielle.

![\[L'exécution de la tâche montre un programme d'exécution unique jusqu'à ce que la tâche échoue.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/monitor-debug-oom-2-execution.png)


Comme le montre le graphique suivant, Spark tente de lancer une nouvelle tâche quatre fois avant l'échec de la tâche. Vous pouvez voir le [profil de la mémoire](monitoring-awsglue-with-cloudwatch-metrics.md#glue.ALL.jvm.heap.used) de trois programmes d'exécution. Chaque programme d'exécution utilise rapidement toute sa mémoire. La quatrième programme d'exécution manque de mémoire et la tâche échoue. Par conséquent, sa métrique n'est pas immédiatement reportée.

![\[Les profils de mémoire des programmes d'exécution.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/monitor-debug-oom-2-exec-memprofile.png)


À partir de la chaîne d'erreur sur la console AWS Glue, vous pouvez vérifier que la tâche a échoué en raison d'exceptions OOM, comme le montre l'image suivante.

![\[Le message d'erreur affiché sur la console AWS Glue.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/monitor-debug-oom-2-errorstring.png)


**Journaux de sortie des tâches :** pour confirmer la découverte d'une exception OOM de l'exécuteur, consultez les CloudWatch journaux. Lorsque vous recherchez **Error**, vous trouvez les quatre programme d'exécution arrêtés en à peu près le même temps que la fenêtre l'affiche sur le tableau de bord des métriques. Ils sont tous résiliés par YARN à mesure qu'ils excèdent les limites de mémoire.

Programme d'exécution 1

```
18/06/13 16:54:29 WARN YarnAllocator: Container killed by YARN for exceeding memory limits. 5.5 GB of 5.5 GB physical memory used. Consider boosting spark.yarn.executor.memoryOverhead.
18/06/13 16:54:29 WARN YarnSchedulerBackend$YarnSchedulerEndpoint: Container killed by YARN for exceeding memory limits. 5.5 GB of 5.5 GB physical memory used. Consider boosting spark.yarn.executor.memoryOverhead.
18/06/13 16:54:29 ERROR YarnClusterScheduler: Lost executor 1 on ip-10-1-2-175.ec2.internal: Container killed by YARN for exceeding memory limits. 5.5 GB of 5.5 GB physical memory used. Consider boosting spark.yarn.executor.memoryOverhead.
18/06/13 16:54:29 WARN TaskSetManager: Lost task 0.0 in stage 0.0 (TID 0, ip-10-1-2-175.ec2.internal, executor 1): ExecutorLostFailure (executor 1 exited caused by one of the running tasks) Reason: Container killed by YARN for exceeding memory limits. 5.5 GB of 5.5 GB physical memory used. Consider boosting spark.yarn.executor.memoryOverhead.
```

Programme d'exécution 2

```
18/06/13 16:55:35 WARN YarnAllocator: Container killed by YARN for exceeding memory limits. 5.8 GB of 5.5 GB physical memory used. Consider boosting spark.yarn.executor.memoryOverhead.
18/06/13 16:55:35 WARN YarnSchedulerBackend$YarnSchedulerEndpoint: Container killed by YARN for exceeding memory limits. 5.8 GB of 5.5 GB physical memory used. Consider boosting spark.yarn.executor.memoryOverhead.
18/06/13 16:55:35 ERROR YarnClusterScheduler: Lost executor 2 on ip-10-1-2-16.ec2.internal: Container killed by YARN for exceeding memory limits. 5.8 GB of 5.5 GB physical memory used. Consider boosting spark.yarn.executor.memoryOverhead.
18/06/13 16:55:35 WARN TaskSetManager: Lost task 0.1 in stage 0.0 (TID 1, ip-10-1-2-16.ec2.internal, executor 2): ExecutorLostFailure (executor 2 exited caused by one of the running tasks) Reason: Container killed by YARN for exceeding memory limits. 5.8 GB of 5.5 GB physical memory used. Consider boosting spark.yarn.executor.memoryOverhead.
```

Programme d'exécution 3

```
18/06/13 16:56:37 WARN YarnAllocator: Container killed by YARN for exceeding memory limits. 5.8 GB of 5.5 GB physical memory used. Consider boosting spark.yarn.executor.memoryOverhead.
18/06/13 16:56:37 WARN YarnSchedulerBackend$YarnSchedulerEndpoint: Container killed by YARN for exceeding memory limits. 5.8 GB of 5.5 GB physical memory used. Consider boosting spark.yarn.executor.memoryOverhead.
18/06/13 16:56:37 ERROR YarnClusterScheduler: Lost executor 3 on ip-10-1-2-189.ec2.internal: Container killed by YARN for exceeding memory limits. 5.8 GB of 5.5 GB physical memory used. Consider boosting spark.yarn.executor.memoryOverhead.
18/06/13 16:56:37 WARN TaskSetManager: Lost task 0.2 in stage 0.0 (TID 2, ip-10-1-2-189.ec2.internal, executor 3): ExecutorLostFailure (executor 3 exited caused by one of the running tasks) Reason: Container killed by YARN for exceeding memory limits. 5.8 GB of 5.5 GB physical memory used. Consider boosting spark.yarn.executor.memoryOverhead.
```

Programme d'exécution 4

```
18/06/13 16:57:18 WARN YarnAllocator: Container killed by YARN for exceeding memory limits. 5.5 GB of 5.5 GB physical memory used. Consider boosting spark.yarn.executor.memoryOverhead.
18/06/13 16:57:18 WARN YarnSchedulerBackend$YarnSchedulerEndpoint: Container killed by YARN for exceeding memory limits. 5.5 GB of 5.5 GB physical memory used. Consider boosting spark.yarn.executor.memoryOverhead.
18/06/13 16:57:18 ERROR YarnClusterScheduler: Lost executor 4 on ip-10-1-2-96.ec2.internal: Container killed by YARN for exceeding memory limits. 5.5 GB of 5.5 GB physical memory used. Consider boosting spark.yarn.executor.memoryOverhead.
18/06/13 16:57:18 WARN TaskSetManager: Lost task 0.3 in stage 0.0 (TID 3, ip-10-1-2-96.ec2.internal, executor 4): ExecutorLostFailure (executor 4 exited caused by one of the running tasks) Reason: Container killed by YARN for exceeding memory limits. 5.5 GB of 5.5 GB physical memory used. Consider boosting spark.yarn.executor.memoryOverhead.
```

### Corriger le paramètre de taille d'extraction à l'aide des images dynamiques AWS Glue
<a name="monitor-debug-oom-fix-2"></a>

Le programme d'exécution est arrivé à court de mémoire lors de la lecture de la table JDBC, car la configuration par défaut de la taille d'extraction du JDBC de Spark est zéro. Cela signifie que le pilote JDBC sur le programme d'exécution Spark tente d'extraire les 34 millions de lignes de la base de données et de les mettre en cache, même si Spark diffuse les lignes une par une. Avec Spark, vous pouvez éviter ce scénario en définissant le paramètre de taille d'extraction par une valeur autre que zéro.

Vous pouvez également résoudre ce problème en utilisant des images dynamiques AWS Glue. Par défaut, les images dynamiques utilisent une taille d'extraction de 1 000 lignes, qui est généralement une valeur suffisante. Par conséquent, le programme d'exécution n'utilise pas plus de 7 % de la mémoire totale. La tâche AWS Glue s'achève en moins de deux minutes avec un seul programme d'exécution. L'utilisation des images dynamiques AWS Glue est l'approche recommandée, mais il est également possible de définir la taille d'extraction à l'aide de la propriété Apache Spark `fetchsize`. Consultez le [guide de Spark SQL DataFrames et des ensembles de données](https://spark.apache.org/docs/2.2.0/sql-programming-guide.html#jdbc-to-other-databases).

```
val (url, database, tableName) = {
 ("jdbc_url", "db_name", "table_name")
 } 
val source = glueContext.getSource(format, sourceJson)
val df = source.getDynamicFrame
glueContext.write_dynamic_frame.from_options(frame = df, connection_type = "s3", connection_options = {"path": output_path}, format = "parquet", transformation_ctx = "datasink")
```

**Métriques profilées normales :** La [mémoire du programme d'exécution](monitoring-awsglue-with-cloudwatch-metrics.md#glue.ALL.jvm.heap.usage) avec les images dynamiques d'AWS Glue ne dépasse jamais le seuil de sécurité, comme le montre l'image suivante. Il diffuse dans les lignes depuis la base de données et met en cache 1 000 lignes seulement dans le pilote JDBC quel que soit le moment. Une exception de mémoire insuffisante ne se produit pas.

![\[La console AWS Glue montrant la mémoire du programme d'exécution en dessous du seuil de sécurité.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/monitor-debug-oom-2-memoryprofile-fixed.png)


# Débogage d'étapes exigeantes et de tâches de ralentissement
<a name="monitor-profile-debug-straggler"></a>

Vous pouvez utiliser le profilage de tâche AWS Glue pour identifier les étapes exigeantes et les tâches de ralentissement dans vos tâches ETL (extraction, transformation et chargement). Un tâche de ralentissement prend beaucoup plus de temps que le reste des tâches dans l'étape d'une tâche AWS Glue. Par conséquent, l'étape s'effectue plus lentement, ce qui retarde aussi la durée d'exécution totale de la tâche.

## Fusion de petits fichiers d'entrée pour obtenir de plus grands fichiers de sortie
<a name="monitor-profile-debug-straggler-scenario-1"></a>

Une tâche de ralentissement a lieu lorsque la distribution du travail au sein des différentes tâches n'est pas uniforme, ou qu'une asymétrie de données entraîne un plus important traitement de données par une tâche.

Vous pouvez profiler le code suivant un modèle commun dans Apache Spark pour fusionner un grand nombre de petits fichiers en de plus grands fichiers de sortie. Pour cet exemple, l'ensemble de données d'entrée est de 32 Go de fichiers compressés Gzip JSON. L'ensemble de données de sortie a environ 190 Go de fichiers JSON décompressés. 

Le code profilé est le suivant :

```
datasource0 = spark.read.format("json").load("s3://input_path")
df = datasource0.coalesce(1)
df.write.format("json").save(output_path)
```

### Voir les métriques profilées sur la console AWS Glue
<a name="monitor-debug-straggler-visualize"></a>

Vous pouvez profiler votre tâche pour examiner quatre différents ensembles de métriques :
+ Déplacement de données ETL
+ Remaniement de données sur les programmes d'exécution
+ Exécution d’une tâche
+ Profil de mémoire

**Déplacement des données ETL** : Dans le profil du **Déplacement des données ETL**, les octets sont [lus](monitoring-awsglue-with-cloudwatch-metrics.md#glue.ALL.s3.filesystem.read_bytes) assez rapidement par tous les programmes d'exécution lors de la première étape qui se termine au cours des six premières minutes. Toutefois, la durée totale d'exécution de la tâche est d'environ une heure, et elle est principalement constituée des [écritures](monitoring-awsglue-with-cloudwatch-metrics.md#glue.ALL.s3.filesystem.write_bytes) de données.

![\[Graphique affichant le profil du déplacement des données ETL.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/monitor-debug-straggler-1.png)


**Remaniement de données sur les programmes d'exécution :** Le nombre d'octets [lus](monitoring-awsglue-with-cloudwatch-metrics.md#glue.driver.aggregate.shuffleLocalBytesRead) et [écrits](monitoring-awsglue-with-cloudwatch-metrics.md#glue.driver.aggregate.shuffleBytesWritten) au cours du remaniement montre également un pic avant la fin de l'étape 2, comme le montrent les métriques de l'**Exécution de tâche** et du **Remaniement de données**. Suite au remaniement des données de tous les programmes d'exploitation, toutes les lectures et les écritures proviennent uniquement du programme d'exécution n°3.

![\[Les métriques pour le remaniement des données sur les programmes d'exploitation.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/monitor-debug-straggler-2.png)


**Exécution de tâche :** Comme le montre le graphique ci-dessous, tous les autres programmes d'exécution sont inactifs et sont finalement abandonnés avant 10:09. A ce stade, le nombre total de programmes d'exécution diminue et il n'en reste qu'un. Ceci montre clairement que le programme d'exécution numéro 3 se compose de la tâche de ralentissement, dont la durée d'exécution est la plus longue, et contribue à la plus grande partie de la durée d'exécution de la tâche.

![\[Les métriques d'exécution pour les programmes d'exécution actifs.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/monitor-debug-straggler-3.png)


**Profil de la mémoire :** Après les deux premières étapes, seul [le programme d'exécution n°3](monitoring-awsglue-with-cloudwatch-metrics.md#glue.executorId.jvm.heap.used) consomme activement de la mémoire pour traiter les données. Les autres programmes d'exécution sont simplement inactifs ou ont été abandonnés peu de temps après la fin des deux premières étapes. 

![\[Les métriques du profil de la mémoire après les deux premières étapes.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/monitor-debug-straggler-4.png)


### Corriger les programmes d'exécution en retard à l'aide du regroupement
<a name="monitor-debug-straggler-fix"></a>

Vous pouvez éviter les programmes d'exécution en retard en utilisant la fonction de *regroupement* dans AWS Glue. Utilisez le regroupement pour répartir les données uniformément sur tous les programmes d'exécution et fusionner des fichiers en fichiers plus volumineux à l'aide de tous les programmes d'exécution disponibles sur le cluster. Pour de plus amples informations, veuillez consulter [Lecture des fichiers en entrée dans des groupes de plus grande taille](grouping-input-files.md).

Pour consulter les déplacements de données ETL dans la tâche AWS Glue, profilez le code suivant avec la fonction de regroupement activée :

```
df = glueContext.create_dynamic_frame_from_options("s3", {'paths': ["s3://input_path"], "recurse":True, 'groupFiles': 'inPartition'}, format="json")
datasink = glueContext.write_dynamic_frame.from_options(frame = df, connection_type = "s3", connection_options = {"path": output_path}, format = "json", transformation_ctx = "datasink4")
```

**Déplacement de données ETL :** Les écritures de données sont désormais diffusées en parallèle avec les lectures de données pendant toute la durée d'exécution de la tâche. Par conséquent, la tâche est réalisée en huit minutes, soit beaucoup plus rapidement qu'avant.

![\[Les déplacements de données ETL affichant que le problème est résolu.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/monitor-debug-straggler-5.png)


**Remaniement des données sur les programmes d'exécution :** Les données d'entrée ayant fusionné lors des lectures grâce à la fonction de regroupement, il n'y a pas de remaniement de données coûteux suite aux lectures de données.

![\[Les métriques du remaniement de données affichant que le problème est résolu.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/monitor-debug-straggler-6.png)


**Exécution de tâche :** Les métriques d'exécution de tâche montrent que le nombre total de programmes d'exécution actifs s'exécutant et traitant des données reste relativement constant. Il n'y a pas de ralentissement dans la tâche. Tous les programmes d'exécution restent actifs et ne sont pas abandonnés tant que la tâche n'est pas terminée. Comme il n'existe pas de remaniement intermédiaire de données sur les programmes d'exécution, il n'y a qu'une seule étape dans la tâche.

![\[Les métriques du widget d'exécution de tâche montrant que la tâche ne comporte pas de ralentisseurs.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/monitor-debug-straggler-7.png)


**Memory profile** (Profil de la mémoire) : les métriques montrent la [consommation de mémoire active](monitoring-awsglue-with-cloudwatch-metrics.md#glue.executorId.jvm.heap.used) par l'ensemble des programmes d'exécution, confirmant une nouvelle fois qu'il existe une activité sur l'ensemble des programmes d'exécution. Les données étant parallèlement envoyées et reçues, l'espace mémoire total de tous les programmes d'exécution est à peu près uniforme et bien au-dessous du seuil de sécurité pour tous les programmes d'exécution.

![\[Les métriques du profil de la mémoire montrant la consommation de mémoire active sur tous les programmes d'exécution.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/monitor-debug-straggler-8.png)


# Surveillance de la progression des tâches multiples
<a name="monitor-debug-multiple"></a>

Vous pouvez profiler plusieurs AWS Glue tâches ensemble et surveiller le flux de données entre elles. Il s'agit d'un modèle de flux de travail courant qui nécessite la surveillance de la progression de chaque tâche, du journal de traitement des données, du retraitement des données et des signets de tâche.

**Topics**
+ [Code profilé](#monitor-debug-multiple-profile)
+ [Voir les métriques profilées sur la console AWS Glue](#monitor-debug-multiple-visualize)
+ [Corriger le traitement des fichiers](#monitor-debug-multiple-fix)

## Code profilé
<a name="monitor-debug-multiple-profile"></a>

Ce flux de travail comprend deux tâches : une tâche d'entrée et une tâche de sortie. La tâche d'entrée est planifiée pour s'exécuter toutes les 30 minutes au moyen d'un déclencheur périodique. La tâche de sortie est planifiée pour s'exécuter après chaque exécution réussie de la tâche d'entrée. Ces tâches planifiées sont contrôlées au moyen de déclencheurs de tâche.

![\[Capture d'écran de la console affichant les déclencheurs de tâche qui contrôlent la planification des tâches d'entrée et de sortie.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/monitor-debug-multiple-1.png)


**Input job** (Tâche d’entrée) : cette tâche lit les données à partir d'un emplacement Amazon Simple Storage Service (Amazon S3), les transforme à l'aide d'`ApplyMapping` et les écrit à un emplacement Amazon S3 intermédiaire. Le code suivant est le code profilé pour la tâche d'entrée :

```
datasource0 = glueContext.create_dynamic_frame.from_options(connection_type="s3", connection_options = {"paths": ["s3://input_path"], "useS3ListImplementation":True,"recurse":True}, format="json")
applymapping1 = ApplyMapping.apply(frame = datasource0, mappings = [map_spec])
datasink2 = glueContext.write_dynamic_frame.from_options(frame = applymapping1, connection_type = "s3", connection_options = {"path": staging_path, "compression": "gzip"}, format = "json")
```

**Output job** (Tâche de sortie) : cette tâche lit la sortie de la tâche d'entrée à partir de l'emplacement intermédiaire dans Amazon S3, les transforme à nouveau et les écrit dans une destination :

```
datasource0 = glueContext.create_dynamic_frame.from_options(connection_type="s3", connection_options = {"paths": [staging_path], "useS3ListImplementation":True,"recurse":True}, format="json")
applymapping1 = ApplyMapping.apply(frame = datasource0, mappings = [map_spec])
datasink2 = glueContext.write_dynamic_frame.from_options(frame = applymapping1, connection_type = "s3", connection_options = {"path": output_path}, format = "json")
```

## Voir les métriques profilées sur la console AWS Glue
<a name="monitor-debug-multiple-visualize"></a>

Le tableau de bord suivant superpose la métrique d'octets Amazon S3 écrits de la tâche d'entrée sur la métrique d'octets Amazon S3 lus selon la même chronologie pour la tâche de sortie. La chronologie montre différentes exécutions de tâche des tâches d'entrée et de sortie. La tâche d'entrée (en rouge) démarre toutes les 30 minutes. La tâche de sortie (en marron) démarre lorsque la tâche d'entrée se termine, avec une simultanéité max. de 1. 

![\[Graphique montrant les données lues et écrites.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/monitor-debug-multiple-4.png)


Dans cet exemple, les [signets de tâche](https://docs.aws.amazon.com/glue/latest/dg/monitor-continuations.html) ne sont pas activés. Aucun contexte de transformation n'est utilisé pour activer les signets de tâche dans le code de script. 

**Historique de tâche** : les tâches d'entrée et de sortie s'exécutent plusieurs fois, à partir de 12 h 00, comme le montre l'onglet **Historique**.

La tâche d'entrée sur la console AWS Glue se présente comme suit :

![\[Capture d'écran de la console affichant l'onglet Historique de la tâche d'entrée.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/monitor-debug-multiple-2.png)


L'image suivante montre la tâche de sortie :

![\[Capture d'écran de la console affichant l'onglet Historique de la tâche de sortie.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/monitor-debug-multiple-3.png)


**Première exécution de tâche** : comme le montre le graphique Octets de données lues et écrites ci-dessous, les premières exécutions des tâches d'entrée et de sortie entre 12 h 00 et 12 h 30 montrent à peu près la même zone sous les courbes. Ces zones représentent les octets Amazon S3 écrits par la tâche d'entrée et les octets Amazon S3 lus par la tâche de sortie. Ces données sont également confirmées par le taux d'octets Amazon S3 écrits (additionnés sur 30 minutes, la fréquence du déclencheur de tâche pour la tâche d'entrée). Le point de données pour le ratio d'exécution de la tâche d'entrée qui a commencé à 12 h 00 est également 1.

Le graphique suivant montre le taux de flux de données pour toutes les exécutions de tâches :

![\[Graphique montrant le ratio du flux de données : octets écrits et octets lus.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/monitor-debug-multiple-5.png)


**Deuxième exécution de tâche** : dans la deuxième exécution de tâche, il existe une différence claire entre le nombre d'octets lus par la tâche de sortie et le nombre d'octets écrits par la tâche d'entrée. (Comparez la zone sous la courbe des deux exécutions de tâche de la tâche de sortie ou comparez les zones de la deuxième exécution des tâches d'entrée et de sortie.) Le ratio entre le nombre d'octets lus et écrits montre que la tâche de sortie lit environ 2,5x les données écrites par la tâche d'entrée dans la seconde période de 30 minutes, de 12 h 30 à 13 h 00. C'est parce que la tâche de sortie a retraité la sortie de la première exécution de la tâche d'entrée car les signets de tâche n'étaient pas activés. Un ratio supérieur à 1 indique qu'un backlog de données supplémentaire a été traité par la tâche de sortie.

**Troisième exécution de tâche** : la tâche d'entrée est assez cohérente quant au nombre d'octets écrits (voir la zone sous les courbes rouges). Toutefois, la troisième exécution de la tâche d'entrée a duré plus longtemps que prévu (voir la longue queue de la courbe rouge). Par conséquent, la troisième exécution de la tâche de sortie a démarré en retard. La troisième exécution de tâche n'a traité qu'une fraction des données cumulées à l'emplacement intermédiaire dans les 30 minutes restantes entre 13 h 00 et 13 h 30. Le taux de débit d'octets indique que seules 0,83 des données écrites ont été traitées par la troisième exécution de la tâche d'entrée (voir le ratio à 13 h 00).

**Chevauchement des tâches d'entrée et de sortie** : la quatrième exécution de la tâche d'entrée a démarré à 13 h 30 comme prévu, avant la fin de la troisième exécution de la tâche de sortie. Ces deux exécutions de tâche se chevauchement partiellement. Toutefois, la troisième exécution de la tâche de sortie ne capture que les fichiers répertoriés dans l'emplacement intermédiaire d'Amazon S3, lorsqu'elle a commencé vers 13:17. Cela comprend toutes les sorties de données de la première exécution de la tâche d'entrée. Le ratio réel à 13 h 30 est d'environ 2,75. La troisième exécution de la tâche de sortie a traité environ 2,75x de données écrites par la quatrième exécution de la tâche d'entrée, de 13 h 30 à 14 h 00.

Comme le montrent ces images, la tâche de sortie retraite des données de toutes les précédentes exécutions de la tâche d'entrée à partir de l'emplacement intermédiaire. Par conséquent, la quatrième exécution de la tâche de sortie est la plus longue et elle chevauche la totalité de la cinquième exécution de la tâche d'entrée.

## Corriger le traitement des fichiers
<a name="monitor-debug-multiple-fix"></a>

Vous devez vous assurer que la tâche de sortie ne traite les fichiers qui n'ont pas été traités par de précédentes exécutions de la tâche de sortie. Pour ce faire, activez les signets de tâche et configurez le contexte de transformation dans la tâche de sortie de la façon suivante :

```
datasource0 = glueContext.create_dynamic_frame.from_options(connection_type="s3", connection_options = {"paths": [staging_path], "useS3ListImplementation":True,"recurse":True}, format="json", transformation_ctx = "bookmark_ctx")
```

Lorsque les signets de tâche sont activés, la tâche de sortie ne retraite pas les données dans l'emplacement intermédiaire pour toutes les précédentes exécutions de la tâche d'entrée. Dans l'image suivante montrant les données lues et écrites, la zone sous la courbe marron est assez cohérente et similaire aux courbes rouges. 

![\[Graphique montrant les données lues et écrites sous forme de lignes rouge et marron.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/monitor-debug-multiple-6.png)


Le rapports du flux d'octets reste également proche de 1, car des données supplémentaires ne sont pas traitées.

![\[Graphique montrant le ratio du flux de données : octets écrits et octets lus\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/monitor-debug-multiple-7.png)


Une exécution de la tâche de sortie démarre et capture les fichiers dans l'emplacement intermédiaire avant que la prochaine exécution de la tâche d'entrée ne commence à placer d'autres données dans l'emplacement intermédiaire. Tant que c'est le cas, elle ne traite que les fichiers capturés lors de la précédente exécution de tâche de sortie, et le ratio reste proche de 1.

![\[Graphique montrant le ratio du flux de données : octets écrits et octets lus\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/monitor-debug-multiple-7.png)


Supposons que la tâche d'entrée dure plus longtemps que prévu et que, par conséquent, la tâche de sortie capture des fichiers dans l'emplacement intermédiaire à partir de deux exécutions de tâche d'entrée. Le ratio est supérieur à 1 pour cette exécution de tâche de sortie. Toutefois, les exécutions de tâches de sortie suivantes ne traitent aucun fichier déjà traité par les précédentes exécutions de la tâche de sortie.

# Surveillance de la planification des capacités de DPU
<a name="monitor-debug-capacity"></a>

Vous pouvez utiliser les métriques des tâches AWS Glue pour estimer le nombre d'unités de traitement des données (DPUs) qui peuvent être utilisées pour étendre une AWS Glue tâche.

**Note**  
Cette page s'applique uniquement à AWS Glue versions 0.9 et 1.0. Les versions ultérieures de AWS Glue contiennent des fonctionnalités économiques qui introduisent des considérations supplémentaires lors de la planification des capacités. 

**Topics**
+ [Code profilé](#monitor-debug-capacity-profile)
+ [Voir les métriques profilées sur la console AWS Glue](#monitor-debug-capacity-visualize)
+ [Déterminer la capacité DPU optimale](#monitor-debug-capacity-fix)

## Code profilé
<a name="monitor-debug-capacity-profile"></a>

Le script suivant lit une partition Amazon Simple Storage Service (Amazon S3) contenant 428 fichiers JSON compressés avec gzip. Le script applique un mappage pour modifier les noms de champs, les convertit et les écrit dans Amazon S3 au format Apache Parquet. Vous DPUs en attribuez 10 par défaut et vous exécutez cette tâche. 

```
datasource0 = glueContext.create_dynamic_frame.from_options(connection_type="s3", connection_options = {"paths": [input_path], "useS3ListImplementation":True,"recurse":True}, format="json")
applymapping1 = ApplyMapping.apply(frame = datasource0, mappings = [(map_spec])
datasink2 = glueContext.write_dynamic_frame.from_options(frame = applymapping1, connection_type = "s3", connection_options = {"path": output_path}, format = "parquet")
```

## Voir les métriques profilées sur la console AWS Glue
<a name="monitor-debug-capacity-visualize"></a>

**Exécution de tâche 1 :** Dans cette exécution de tâche, nous montrons comment déterminer si le cluster est sous-approvisionné DPUs . La fonctionnalité d'exécution de tâches dans AWS Glue indique le [nombre total de programmes d'exécution actifs en cours d'exécution](monitoring-awsglue-with-cloudwatch-metrics.md#glue.driver.ExecutorAllocationManager.executors.numberAllExecutors), le [nombre d'étapes terminées](monitoring-awsglue-with-cloudwatch-metrics.md#glue.driver.aggregate.numCompletedStages) et le [nombre maximum de programmes d'exécution nécessaires](monitoring-awsglue-with-cloudwatch-metrics.md#glue.driver.ExecutorAllocationManager.executors.numberMaxNeededExecutors).

Le nombre maximum de programmes d'exécution nécessaires est calculé en ajoutant le nombre total de tâches en cours d'exécution et de tâches en attente, puis en divisant ce nombre par le nombre de tâches par programme d'exécution. Ce résultat est une mesure du nombre total d'exécuteurs requises pour satisfaire la charge du moment. 

En revanche, le nombre de programmes d'exécution actifs en cours d'exécution mesure le nombre de programmes d'exécution qui exécutent des tâches Apache Spark. À mesure que la tâche progresse, le nombre maximum de programmes d'exécution nécessaires peut varier et baisse généralement vers la fin de la tâche à mesure que diminue la file d'attente de tâches en attente.

La ligne rouge horizontale du graphique suivant indique le nombre maximum d'exécuteurs alloués, qui dépend du nombre d'exécuteurs DPUs que vous allouez à la tâche. Dans ce cas, vous allouez 10 points DPUs à l'exécution du job. Une DPU est réservée à la gestion. Neuf DPUs exécuteurs exécutent deux exécuteurs chacun et un exécuteur est réservé au pilote Spark. Le pilote Spark s'exécute dans l'application principale. Par conséquent, le nombre maximum de programmes d'exécution alloués est de 2 x 9 - 1 = 17 programmes d'exécution.

![\[Les métriques de la tâche affichant les programmes d'exécution actifs et les programmes d'exécution nécessaires maximum.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/monitor-debug-capacity-1.png)


Comme le montre le graphique, le nombre maximum de programmes d'exécution nécessaires commence à 107 au début de la tâche, alors que le nombre de programmes d'exécution actifs reste 17. C'est le même que le nombre maximum d'exécuteurs alloués, soit 10 DPUs. Le ratio entre le nombre maximum de programmes d'exécution nécessaires et le nombre maximum de programmes d'exécution alloués (en ajoutant 1 à chacun des pilotes Spark) donne le facteur sous-alloué : 108/18 = 6x. Vous pouvez en configurer 6 (sous le ratio de provisionnement) \$19 (capacité actuelle du DPU - 1) \$1 1 DPUs = 55 DPUs pour étendre le travail afin de l'exécuter avec un parallélisme maximal et de terminer plus rapidement. 

La console AWS Glue affiche le détail des métriques des tâches sous la forme d'une ligne statique qui représente le nombre maximal de programmes d'exécution alloués au départ. Pour ces métriques, la console calcule le nombre maximum de programme d'exécution alloués à partir de la définition de la tâche. En revanche, pour les métriques détaillées d'exécution des tâches, la console calcule le nombre maximum d'exécuteurs alloués à partir de la configuration d'exécution des tâches, en particulier le nombre DPUs alloué pour l'exécution des tâches. Pour afficher les métriques d'une exécution de tâche spécifique, sélectionnez l'exécution et choisissez **View run metrics (Afficher les métriques de l'exécution)**.

![\[Les métriques de la tâche montrant le déplacement de données ETL.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/monitor-debug-capacity-2.png)


Si l'on regarde les octets Amazon S3 [lus](monitoring-awsglue-with-cloudwatch-metrics.md#glue.ALL.s3.filesystem.read_bytes) et [écrits](monitoring-awsglue-with-cloudwatch-metrics.md#glue.ALL.s3.filesystem.write_bytes), on remarque que la tâche prend six minutes complètes pour diffuser les données à partir d’Amazon S3 et les écrire en parallèle. Tous les cœurs alloués DPUs lisent et écrivent sur Amazon S3. Le nombre maximum de programmes d'exécution nécessaires (107) correspond également au nombre de fichiers dans le chemin d'accès d'entrée Amazon S3 (428). Chaque programme d'exécution peut lancer quatre tâches Spark pour traiter quatre fichiers d'entrée (JSON compressées avec gzip).

## Déterminer la capacité DPU optimale
<a name="monitor-debug-capacity-fix"></a>

Sur la base des résultats de l'exécution de la tâche précédente, vous pouvez augmenter le nombre total de tâches allouées DPUs à 55 et suivre les performances de la tâche. La tâche se termine en moins de trois minutes, soit la moitié du temps auparavant nécessaire. La montée en charge de la tâche n'est pas linéaire dans ce cas, car il s'agit d'une tâche d'exécution courte. Les tâches comportant des tâches de longue durée ou un grand nombre de tâches (un grand nombre d'exécuteurs maximum nécessaires) bénéficient d'une accélération des performances du close-to-linear DPU grâce à la scale-out.

![\[Graphique montrant l'augmentation du nombre total de DPUs\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/monitor-debug-capacity-3.png)


Comme le montre l'image ci-dessus, le nombre total de programmes d'exécution actifs atteint le nombre maximum de programmes d'exécution alloués (107). De même, le nombre maximum de programmes d'exécution nécessaires ne dépasse jamais le nombre maximum de programmes d'exécution alloués. Le nombre maximum de programmes d'exécution nécessaires est calculé à partir du nombre de tâches en cours d'exécution et en attente, il doit donc être inférieur au nombre de programmes d'exécution actifs. Ceci est dû au fait que des programmes d'exécution peuvent être partiellement ou complètement inactifs pour une courte période de temps et ne sont pas encore démagnétisés.

![\[Graphique montrant le nombre total de programmes d'exécution actifs atteignant le nombre alloué maximum.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/monitor-debug-capacity-4.png)


Cette exécution de tâche utilise 6 fois plus de programmes d'exécution pour lire et écrire en parallèle depuis Amazon S3. Par conséquent, cette exécution de tâche utilise plus de bande passante Amazon S3 pour les lectures et les écritures, et se termine plus rapidement. 

### Identifiez le surprovisionnement DPUs
<a name="monitor-debug-capacity-over"></a>

Ensuite, vous pouvez déterminer si le fait d'étendre la tâche à 100 DPUs (99 \$1 2 = 198 exécuteurs) permet de poursuivre l'extension. Comme le montre le graphique suivant, la tâche se termine toujours après trois minutes. De même, la tâche ne dépasse pas 107 exécuteurs ( DPUsconfiguration 55), et les 91 exécuteurs restants sont surapprovisionnés et ne sont pas du tout utilisés. Cela montre que l'augmentation du nombre de n' DPUs améliore pas toujours les performances, comme en témoigne le nombre maximal d'exécuteurs nécessaires.

![\[Graphique montrant que les performances au travail n'augmentent pas toujours en augmentant le nombre de DPUs.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/monitor-debug-capacity-5.png)


### Comparer des différences de temps
<a name="monitor-debug-capacity-time"></a>

Les trois cycles de travail présentés dans le tableau suivant résument les temps d'exécution des travaux pour 10 DPUs DPUs, 55 et 100 DPUs. Vous pouvez trouver la capacité de DPU pour améliorer la durée d'exécution de la tâche en utilisant l'estimation que vous avez réalisée en surveillant la première exécution de tâche.


| ID de tâche | Nombre de DPUs | Durée d’exécution | 
| --- | --- | --- | 
| jr\$1c894524c8ef5048a4d9... | 10 | 6 min. | 
| jr\$11a466cf2575e7ffe6856... | 55 | 3 min. | 
| jr\$134fa1ed4c6aa9ff0a814... | 100 | 3 min. | 

# Résolution des problèmes liés à l'IA générative pour Apache Spark in AWS Glue
<a name="troubleshoot-spark"></a>

 La résolution des problèmes liés à l'IA générative pour les tâches Apache Spark dans AWS Glue est une nouvelle fonctionnalité qui aide les ingénieurs de données et les scientifiques à diagnostiquer et à résoudre facilement les problèmes dans leurs applications Spark. En utilisant les technologies de machine learning et d’IA générative, cette fonctionnalité analyse les problèmes liés aux tâches Spark et fournit une analyse détaillée des causes profondes, ainsi que des recommandations pratiques pour les résoudre. Le dépannage génératif de l'IA pour Apache Spark est disponible pour les jobs exécutés sur AWS Glue version 4.0 ou supérieure. 


|  | 
| --- |
|  Transformez votre résolution des problèmes liés à Apache Spark grâce à notre agent de résolution des problèmes basé sur l'IA, qui prend désormais en charge tous les principaux modes de déploiement, notamment AWS Glue, Amazon EMR-, EC2 Amazon EMR-Serverless et Amazon AI Notebooks. SageMaker Ce puissant agent élimine les processus de débogage complexes en combinant des interactions en langage naturel, une analyse de la charge de travail en temps réel et des recommandations de code intelligent dans une expérience fluide. Pour plus de détails sur l'implémentation, reportez-vous à la section [Qu'est-ce que l'agent de résolution des problèmes Apache Spark pour Amazon EMR ?](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/spark-troubleshoot.html) Consultez la deuxième démonstration dans la section Exemples de [résolution des problèmes liés à l'utilisation de l'agent](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/spark-troubleshooting-using-troubleshooting-agent.html) de dépannage pour AWS Glue.  | 

## Comment fonctionne la Résolution des problèmes à l’aide de l’IA générative pour Apache Spark ?
<a name="troubleshoot-spark-how-it-works"></a>

 Pour les tâches Spark qui ont échoué, Generative AI Troubleshooting analyse les métadonnées des tâches ainsi que les indicateurs et journaux précis associés à la signature d'erreur de votre tâche afin de générer une analyse des causes premières, et recommande des solutions spécifiques et les meilleures pratiques pour aider à remédier aux échecs de tâches. 

## Configuration de la Résolution des problèmes à l’aide de l’IA générative pour Apache Spark pour vos tâches
<a name="w2aac37c11c12c33c13"></a>

### Configuration des autorisations IAM
<a name="troubleshoot-spark-iam-permissions"></a>

 L'octroi d'autorisations à l'utilisateur APIs utilisé par Spark Troubleshooting pour vos tâches dans AWS Glue nécessite les autorisations IAM appropriées. Vous pouvez obtenir des autorisations en associant la AWS politique personnalisée suivante à votre identité IAM (comme un utilisateur, un rôle ou un groupe). 

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:StartCompletion",
        "glue:GetCompletion"
      ],
      "Resource": [
        "arn:aws:glue:*:*:completion/*",
        "arn:aws:glue:*:*:job/*"
      ]
    }
  ]
}
```

------

**Note**  
 APIs Les deux éléments suivants sont utilisés dans la politique IAM pour permettre cette expérience via la console AWS Glue Studio : `StartCompletion` et`GetCompletion`. 

### Attribution d’autorisations
<a name="troubleshoot-spark-assigning-permissions"></a>

 Pour activer l’accès, ajoutez des autorisations à vos utilisateurs, groupes ou rôles : 
+  Pour les utilisateurs et les groupes dans IAM Identity Center : créez un ensemble d’autorisations. Suivez les instructions de la rubrique [Create a permission set](https://docs.aws.amazon.com/singlesignon/latest/userguide/howtocreatepermissionset.html) du Guide de l’utilisateur IAM Identity Center. 
+  Pour les utilisateurs gérés dans IAM via un fournisseur d’identité : créez un rôle pour la fédération d’identité. Pour plus d’informations, consultez [Creating a role for a third-party identity provider (federation)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp.html) dans le Guide de l’utilisateur IAM. 
+  Pour les utilisateurs IAM : créez un rôel que votre utilisateur peut endosser. Suivez les instructions de la rubrique [Creating a role for an IAM user](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html) du Guide de l’utilisateur IAM. 

## Exécution d’une analyse de résolution des problèmes suite à l’échec de l’exécution d’une tâche
<a name="troubleshoot-spark-run-analysis"></a>

 Vous pouvez accéder à la fonctionnalité de résolution des problèmes via plusieurs chemins dans la console AWS Glue. Voici la procédure de démarrage : 

### Option 1 : depuis la page Liste des tâches
<a name="troubleshoot-spark-from-jobs-list"></a>

1.  Ouvrez la console AWS Glue à l'adresse [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/). 

1.  Dans le volet de navigation, sélectionnez **Tâches ETL**. 

1.  Recherchez votre tâche qui a échoué dans la liste des tâches. 

1.  Sélectionnez l’onglet **Exécutions** dans la section des informations de la tâche. 

1.  Cliquez sur la tâche qui a échoué et que vous souhaitez analyser. 

1.  Choisissez **Résoudre les problèmes avec l’IA** pour démarrer l’analyse. 

1.  Lorsque l’analyse de résolution des problèmes est terminée, vous pouvez consulter l’analyse des causes premières et les recommandations dans l’onglet **Analyse de résolution des problèmes** en bas de l’écran. 

![\[Le GIF montre l’implémentation de bout en bout d’une exécution échouée et le dépannage avec la fonctionnalité IA en cours d’exécution.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/troubleshoot_spark_option_1_jobs_list.gif)


### Option 2 : utilisation de la page Surveillance de l’exécution des tâches
<a name="troubleshoot-spark-job-run-monitoring-page"></a>

1.  Accédez à la page de **Surveillance de l’exécution des tâches**. 

1.  Localisez l’exécution de votre tâche qui a échoué. 

1.  Choisissez le menu déroulant **Actions**. 

1.  Choisissez **Résoudre les problèmes avec l’IA**. 

![\[Le GIF montre l’implémentation de bout en bout d’une exécution échouée et le dépannage avec la fonctionnalité IA en cours d’exécution.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/troubleshoot_spark_option_2_job_monitoring.gif)


### Option 3 : depuis la page Détails de l’exécution des tâches
<a name="troubleshoot-spark-job-run-details-page"></a>

1.  Accédez à la page de détails de l’exécution de la tâche qui a échoué en cliquant sur **Afficher les détails** d’une exécution échouée dans l’onglet **Exécutions** ou en sélectionnant l’exécution de la tâche sur la page **Surveillance de l’exécution des tâches**. 

1.  Sur la page des détails de l’exécution des tâches, recherchez l’onglet **Analyse de dépannage**. 

## Catégories de dépannage prises en charge
<a name="troubleshoot-spark-supported-troubleshooting-categories"></a>

 Ce service se concentre sur trois catégories principales de problèmes que les ingénieurs de données et les développeurs rencontrent fréquemment dans leurs applications Spark : 
+  **Erreurs de configuration et d'accès aux ressources :** lors de l'exécution d'applications Spark dans AWS Glue, les erreurs de configuration des ressources et d'accès figurent parmi les problèmes les plus courants mais les plus difficiles à diagnostiquer. Ces erreurs se produisent souvent lorsque votre application Spark tente d'interagir avec AWS des ressources mais rencontre des problèmes d'autorisation, des ressources manquantes ou des problèmes de configuration. 
+  **Problèmes de mémoire liés au pilote et à l’exécuteur Spark :** les erreurs liées à la mémoire dans les tâches Apache Spark peuvent être complexes à diagnostiquer et à résoudre. Ces erreurs se produisent souvent lorsque vos exigences en matière de traitement des données dépassent les ressources de mémoire disponibles, que ce soit sur le nœud du pilote ou les nœuds d’exécuteur. 
+  **Problèmes de capacité du disque Spark : les** erreurs liées au stockage dans les tâches AWS Glue Spark apparaissent souvent lors d'opérations de remaniement, de fuite de données ou lors de transformations de données à grande échelle. Ces erreurs peuvent être particulièrement délicates, car elles peuvent ne pas se manifester avant que votre tâche ne soit en cours d’exécution pendant une certaine durée, ce qui peut entraîner une perte de temps et de ressources de calcul précieux. 
+  **Erreurs d'exécution des requêtes : les** échecs de requête dans Spark SQL et les DataFrame opérations peuvent être difficiles à résoudre car les messages d'erreur peuvent ne pas indiquer clairement la cause première, et les requêtes qui fonctionnent correctement avec de petits ensembles de données peuvent soudainement échouer à grande échelle. Ces erreurs deviennent encore plus difficiles lorsqu'elles se produisent au cœur de pipelines de transformation complexes, où le véritable problème peut être dû à des problèmes de qualité des données survenus aux étapes précédentes plutôt qu'à la logique de requête elle-même. 

**Note**  
 Avant de mettre en œuvre les modifications suggérées dans votre environnement de production, examinez-les attentivement. Le service fournit des recommandations basées sur des modèles et des bonnes pratiques, mais votre cas d’utilisation spécifique peut nécessiter des considérations supplémentaires. 

## Régions prises en charge
<a name="troubleshoot-spark-supported-regions"></a>

Le dépannage génératif de l'IA pour Apache Spark est disponible dans les régions suivantes :
+ **Afrique** : Le Cap (af-south-1)
+ **Asie-Pacifique** : Hong Kong (ap-east-1), Tokyo (ap-northeast-1), Séoul (ap-northeast-2), Osaka (ap-northeast-3), Mumbai (ap-south-1), Singapour (ap-southeast-1) ap-southeast-1), Sydney (ap-southeast-2) et Jakarta (ap-southeast-3)
+ **Europe** : Francfort (eu-central-1), Stockholm (eu-nord-1), Milan (eu-sud-1), Irlande (eu-west-1), Londres (eu-west-2) et Paris (eu-west-3)
+ **Moyen-Orient** : Bahreïn (me-south-1) et Émirats arabes unis (me-central-1)
+ **Amérique du** Nord : Canada (ca-central-1)
+ **Amérique du Sud** : São Paulo (sa-east-1)
+ **États-Unis** : Virginie du Nord (us-east-1), Ohio (us-east-2), Californie du Nord (us-west-1) et Oregon (us-west-2)

# Utilisation de vues matérialisées avec Glue AWS
<a name="materialized-views"></a>

AWS Les versions 5.1 et ultérieures de Glue permettent de créer et de gérer des vues matérialisées Apache Iceberg dans le catalogue de données AWS Glue. Une vue matérialisée est une table gérée qui stocke le résultat précalculé d'une requête SQL au format Apache Iceberg et qui est mise à jour progressivement à mesure que les tables sources sous-jacentes changent. Vous pouvez utiliser des vues matérialisées pour simplifier les pipelines de transformation des données et accélérer les performances des requêtes pour les charges de travail analytiques complexes.

Lorsque vous créez une vue matérialisée à l'aide de Spark in AWS Glue, la définition de la vue et les métadonnées sont stockées dans le catalogue de données AWS Glue. Les résultats précalculés sont stockés sous forme de tables Apache Iceberg dans des compartiments Amazon S3 Tables ou dans des compartiments à usage général Amazon S3 au sein de votre compte. Le catalogue de données AWS Glue surveille automatiquement les tables sources et actualise les vues matérialisées à l'aide d'une infrastructure informatique gérée.

**Topics**
+ [Comment fonctionnent les vues matérialisées avec Glue AWS](#materialized-views-how-they-work)
+ [Conditions préalables](#materialized-views-prerequisites)
+ [Configuration de Spark pour utiliser des vues matérialisées](#materialized-views-configuring-spark)
+ [Création de vues matérialisées](#materialized-views-creating)
+ [Interrogation de vues matérialisées](#materialized-views-querying)
+ [Actualisation de vues matérialisées](#materialized-views-refreshing)
+ [Gestion des vues matérialisées](#materialized-views-managing)
+ [Autorisations pour les vues matérialisées](#materialized-views-permissions)
+ [Surveillance des opérations de visualisation matérialisée](#materialized-views-monitoring)
+ [Exemple : flux de travail complet](#materialized-views-complete-workflow)
+ [Considérations et restrictions](#materialized-views-considerations-limitations)

## Comment fonctionnent les vues matérialisées avec Glue AWS
<a name="materialized-views-how-they-work"></a>

Les vues matérialisées s'intègrent à AWS Glue grâce au support Iceberg d'Apache Spark dans les tâches AWS Glue et les blocs-notes AWS Glue Studio. Lorsque vous configurez votre session Spark pour utiliser le catalogue de données AWS Glue, vous pouvez créer des vues matérialisées à l'aide de la syntaxe SQL standard. L'optimiseur Spark peut automatiquement réécrire les requêtes pour utiliser des vues matérialisées lorsqu'elles offrent de meilleures performances, éliminant ainsi le besoin de modifier manuellement le code de l'application.

Le catalogue de données AWS Glue gère tous les aspects opérationnels de la maintenance des vues matérialisées, notamment :
+ Détecter les modifications dans les tables sources à l'aide de la couche de métadonnées d'Apache Iceberg
+ Planification et exécution des opérations d'actualisation à l'aide du calcul géré par Spark
+ Déterminer s'il convient d'effectuer une actualisation complète ou incrémentielle en fonction des modifications apportées aux données
+ Stockage des résultats précalculés au format Apache Iceberg pour un accès multimoteur

Vous pouvez interroger des vues matérialisées à partir de AWS Glue en utilisant les mêmes interfaces SQL Spark que celles que vous utilisez pour les tables classiques. Les données précalculées sont également accessibles depuis d'autres services, notamment Amazon Athena et Amazon Redshift.

## Conditions préalables
<a name="materialized-views-prerequisites"></a>

Pour utiliser des vues matérialisées avec AWS Glue, vous devez :
+ Un compte 
+ AWS Glue version 5.1 ou ultérieure
+ Tables sources au format Apache Iceberg enregistrées dans le catalogue de données AWS Glue
+ AWS Lake Formation autorisations configurées pour les tables sources et les bases de données cibles
+ Un bucket S3 Tables ou un bucket S3 à usage général enregistré auprès duquel sont AWS Lake Formation stockées des données de vue matérialisées
+ Rôle IAM autorisé à accéder à AWS Glue Data Catalog et à Amazon S3

## Configuration de Spark pour utiliser des vues matérialisées
<a name="materialized-views-configuring-spark"></a>

Pour créer et gérer des vues matérialisées dans AWS Glue, configurez votre session Spark avec les extensions Iceberg et les paramètres de catalogue requis. La méthode de configuration varie selon que vous utilisez des tâches AWS Glue ou des blocs-notes AWS Glue Studio.

### Configuration des tâches AWS Glue
<a name="materialized-views-configuring-glue-jobs"></a>

Lorsque vous créez ou mettez à jour une tâche AWS Glue, ajoutez les paramètres de configuration suivants en tant que paramètres de tâche :

#### Pour seaux S3 Tables
<a name="materialized-views-s3-tables-buckets"></a>

```
job = glue.create_job(
    Name='materialized-view-job',
    Role='arn:aws:iam::111122223333:role/GlueServiceRole',
    Command={
        'Name': 'glueetl',
        'ScriptLocation': 's3://amzn-s3-demo-bucket/scripts/mv-script.py',
        'PythonVersion': '3'
    },
    DefaultArguments={
        '--enable-glue-datacatalog': 'true',
        '--conf': 'spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions '
        '--conf spark.sql.catalog.glue_catalog=org.apache.iceberg.spark.SparkCatalog '
                  '--conf spark.sql.catalog.glue_catalog.type=glue '
                  '--conf spark.sql.catalog.glue_catalog.warehouse=s3://amzn-s3-demo-bucket/warehouse '
                  '--conf spark.sql.catalog.glue_catalog.glue.region=us-east-1 '
                  '--conf spark.sql.catalog.glue_catalog.glue.id=111122223333 '
                  '--conf spark.sql.catalog.glue_catalog.glue.account-id=111122223333 ',
                  '--conf spark.sql.catalog.glue_catalog.glue.lakeformation-enabled=true ',
                  '--conf spark.sql.catalog.s3t_catalog=org.apache.iceberg.spark.SparkCatalog '
                  '--conf spark.sql.catalog.s3t_catalog.type=glue '
                  '--conf spark.sql.catalog.s3t_catalog.glue.id=111122223333:s3tablescatalog/my-table-bucket ',
                  '--conf spark.sql.catalog.s3t_catalog.glue.account-id=111122223333 ',
                  '--conf spark.sql.catalog.s3t_catalog.glue.lakeformation-enabled=true ',
                  '--conf spark.sql.catalog.s3t_catalog.warehouse=s3://amzn-s3-demo-bucket/mv-warehouse '
                  '--conf spark.sql.catalog.s3t_catalog.glue.region=us-east-1 '
                  '--conf spark.sql.defaultCatalog=s3t_catalog '
                  '--conf spark.sql.optimizer.answerQueriesWithMVs.enabled=true '
                  '--conf spark.sql.materializedViews.metadataCache.enabled=true'
    },
    GlueVersion='5.1'
)
```

#### Pour les godets à usage général S3
<a name="materialized-views-s3-general-purpose-buckets"></a>

```
job = glue.create_job(
    Name='materialized-view-job',
    Role='arn:aws:iam::111122223333:role/GlueServiceRole',
    Command={
        'Name': 'glueetl',
        'ScriptLocation': 's3://amzn-s3-demo-bucket/scripts/mv-script.py',
        'PythonVersion': '3'
    },
    DefaultArguments={
        '--enable-glue-datacatalog': 'true',
        '--conf': 'spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions '
                  '--conf spark.sql.catalog.glue_catalog=org.apache.iceberg.spark.SparkCatalog '
                  '--conf spark.sql.catalog.glue_catalog.type=glue '
                  '--conf spark.sql.catalog.glue_catalog.warehouse=s3://amzn-s3-demo-bucket/warehouse '
                  '--conf spark.sql.catalog.glue_catalog.glue.region=us-east-1 '
                  '--conf spark.sql.catalog.glue_catalog.glue.id=111122223333 ',
                  '--conf spark.sql.catalog.glue_catalog.glue.account-id=111122223333 ',
                  '--conf spark.sql.catalog.glue_catalog.glue.lakeformation-enabled=true ',
                  '--conf spark.sql.defaultCatalog=glue_catalog '
                  '--conf spark.sql.optimizer.answerQueriesWithMVs.enabled=true '
                  '--conf spark.sql.materializedViews.metadataCache.enabled=true'
    },
    GlueVersion='5.1'
)
```

### Configuration des blocs-notes AWS Glue Studio
<a name="materialized-views-configuring-glue-studio-notebooks"></a>

Dans les blocs-notes AWS Glue Studio, configurez votre session Spark à l'aide de la commande magique %%configure au début de votre bloc-notes :

```
%%configure
{
    "conf": {
        "spark.sql.extensions": "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions",
        "spark.sql.catalog.glue_catalog": "org.apache.iceberg.spark.SparkCatalog",
        "spark.sql.catalog.glue_catalog.type": "glue",
        "spark.sql.catalog.glue_catalog.warehouse": "s3://amzn-s3-demo-bucket/warehouse",
        "spark.sql.catalog.glue_catalog.glue.region": "us-east-1",
        "spark.sql.catalog.glue_catalog.glue.id": "111122223333",
        "spark.sql.catalog.glue_catalog.glue.account-id": "111122223333",
        "spark.sql.catalog.glue_catalog.glue.lakeformation-enabled": "true",
        "spark.sql.defaultCatalog": "glue_catalog",
        "spark.sql.optimizer.answerQueriesWithMVs.enabled": "true",
        "spark.sql.materializedViews.metadataCache.enabled": "true"
    }
}
```

### Activation de l'actualisation incrémentielle
<a name="materialized-views-enabling-incremental-refresh"></a>

Pour activer l'optimisation de l'actualisation incrémentielle, ajoutez les propriétés de configuration suivantes aux paramètres de votre tâche ou à la configuration de votre bloc-notes :

```
--conf spark.sql.optimizer.incrementalMVRefresh.enabled=true
--conf spark.sql.optimizer.incrementalMVRefresh.deltaThresholdCheckEnabled=false
```

### Paramètres de configuration
<a name="materialized-views-configuration-parameters"></a>

Les paramètres de configuration suivants contrôlent le comportement des vues matérialisées :
+ `spark.sql.extensions`— Active les extensions de session Iceberg Spark requises pour la prise en charge des vues matérialisées.
+ `spark.sql.optimizer.answerQueriesWithMVs.enabled`— Permet la réécriture automatique des requêtes pour utiliser des vues matérialisées. Définissez ce paramètre sur true pour activer cette optimisation.
+ `spark.sql.materializedViews.metadataCache.enabled`— Active la mise en cache des métadonnées des vues matérialisées pour l'optimisation des requêtes. Définissez ce paramètre sur true pour améliorer les performances de réécriture des requêtes.
+ `spark.sql.optimizer.incrementalMVRefresh.enabled`— Permet une optimisation de l'actualisation incrémentielle. Définissez cette valeur sur true pour traiter uniquement les données modifiées lors des opérations d'actualisation.
+ `spark.sql.optimizer.answerQueriesWithMVs.decimalAggregateCheckEnabled`— Contrôle la validation des opérations d'agrégation décimale lors de la réécriture des requêtes. Définissez cette valeur sur false pour désactiver certains contrôles de dépassement de décimales.

## Création de vues matérialisées
<a name="materialized-views-creating"></a>

Vous créez des vues matérialisées à l'aide de l'instruction SQL CREATE MATERIALIZED VIEW dans les jobs ou les AWS blocs-notes Glue. La définition de la vue spécifie la logique de transformation sous la forme d'une requête SQL qui fait référence à une ou plusieurs tables sources.

### Création d'une vue matérialisée de base dans les tâches AWS Glue
<a name="materialized-views-creating-basic-glue-jobs"></a>

L'exemple suivant montre comment créer une vue matérialisée dans un script de tâche AWS Glue. Utilisez des noms de table complets avec une convention de dénomination en trois parties dans la définition de la vue :

```
from awsglue.context import GlueContext
from pyspark.context import SparkContext

sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session

# Create materialized view
spark.sql("""
    CREATE MATERIALIZED VIEW customer_orders
    AS 
    SELECT 
        customer_name, 
        COUNT(*) as order_count, 
        SUM(amount) as total_amount 
    FROM glue_catalog.sales.orders
    GROUP BY customer_name
""")
```

### Création d'une vue matérialisée avec actualisation automatique
<a name="materialized-views-creating-automatic-refresh"></a>

Pour configurer l'actualisation automatique, spécifiez un calendrier d'actualisation lors de la création de la vue, en utilisant des noms de table complets avec une convention de dénomination en trois parties dans la définition de la vue :

```
spark.sql("""
    CREATE MATERIALIZED VIEW customer_orders
    SCHEDULE REFRESH EVERY 1 HOUR
    AS 
    SELECT 
        customer_name, 
        COUNT(*) as order_count, 
        SUM(amount) as total_amount 
    FROM glue_catalog.sales.orders
    GROUP BY customer_name
""")
```

### Création d'une vue matérialisée avec des références croisées à des catalogues
<a name="materialized-views-creating-cross-catalog"></a>

Lorsque vos tables sources se trouvent dans un catalogue différent de celui de votre vue matérialisée, utilisez des noms de table complets avec une convention de dénomination en trois parties à la fois dans le nom de la vue et dans la définition de la vue :

```
spark.sql("""
    CREATE MATERIALIZED VIEW s3t_catalog.analytics.customer_summary
    AS 
    SELECT 
        customer_name, 
        COUNT(*) as order_count, 
        SUM(amount) as total_amount 
    FROM glue_catalog.sales.orders
    GROUP BY customer_name
""")
```

### Création de vues matérialisées dans les blocs-notes AWS Glue Studio
<a name="materialized-views-creating-glue-studio-notebooks"></a>

Dans les blocs-notes AWS Glue Studio, vous pouvez utiliser la commande magique %%sql pour créer des vues matérialisées, en utilisant des noms de table complets avec une convention de dénomination en trois parties pour la définition des vues :

```
%%sql
CREATE MATERIALIZED VIEW customer_orders
AS 
SELECT 
    customer_name, 
    COUNT(*) as order_count, 
    SUM(amount) as total_amount 
FROM glue_catalog.sales.orders
GROUP BY customer_name
```

## Interrogation de vues matérialisées
<a name="materialized-views-querying"></a>

Après avoir créé une vue matérialisée, vous pouvez l'interroger comme n'importe quelle autre table à l'aide des instructions SQL SELECT standard dans vos jobs AWS Glue ou vos carnets de notes.

### Effectuer des requêtes dans AWS Glue Jobs
<a name="materialized-views-querying-glue-jobs"></a>

```
from awsglue.context import GlueContext
from pyspark.context import SparkContext

sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session

# Query materialized view
result = spark.sql("SELECT * FROM customer_orders")
result.show()
```

### Effectuer des requêtes dans les AWS blocs-notes Glue Studio
<a name="materialized-views-querying-glue-studio-notebooks"></a>

```
%%sql
SELECT * FROM customer_orders
```

### Réécriture automatique des requêtes
<a name="materialized-views-automatic-query-rewrite"></a>

Lorsque la réécriture automatique des requêtes est activée, l'optimiseur Spark analyse vos requêtes et utilise automatiquement des vues matérialisées lorsqu'elles peuvent améliorer les performances. Par exemple, si vous exécutez la requête suivante :

```
result = spark.sql("""
    SELECT 
        customer_name, 
        COUNT(*) as order_count, 
        SUM(amount) as total_amount 
    FROM orders
    GROUP BY customer_name
""")
```

L'optimiseur Spark réécrit automatiquement cette requête pour utiliser la vue matérialisée customer\$1orders au lieu de traiter la table des commandes de base, à condition que la vue matérialisée soit à jour.

### Vérification de la réécriture automatique des requêtes
<a name="materialized-views-verifying-automatic-query-rewrite"></a>

Pour vérifier si une requête utilise la réécriture automatique des requêtes, utilisez la commande EXPLAIN EXTENDED :

```
spark.sql("""
    EXPLAIN EXTENDED
    SELECT customer_name, COUNT(*) as order_count, SUM(amount) as total_amount 
    FROM orders
    GROUP BY customer_name
""").show(truncate=False)
```

Dans le plan d'exécution, recherchez le nom de la vue matérialisée dans l' BatchScan opération. Si le plan affiche BatchScan glue\$1catalog.analytics.customer\$1orders au lieu de glue\$1catalog.sales.orders, la requête a été automatiquement réécrite pour BatchScan utiliser la vue matérialisée.

Notez que la réécriture automatique des requêtes nécessite du temps pour que le cache de métadonnées Spark soit rempli après la création d'une vue matérialisée. Ce processus se termine généralement en 30 secondes.

## Actualisation de vues matérialisées
<a name="materialized-views-refreshing"></a>

Vous pouvez actualiser les vues matérialisées à l'aide de deux méthodes : actualisation complète ou actualisation incrémentielle. L'actualisation complète recalcule l'intégralité de la vue matérialisée à partir de toutes les données de la table de base, tandis que l'actualisation incrémentielle traite uniquement les données modifiées depuis la dernière actualisation.

### Actualisation complète manuelle dans les tâches AWS Glue
<a name="materialized-views-manual-full-refresh-glue-jobs"></a>

Pour actualiser complètement une vue matérialisée :

```
spark.sql("REFRESH MATERIALIZED VIEW customer_orders FULL")

# Verify updated results
result = spark.sql("SELECT * FROM customer_orders")
result.show()
```

### Actualisation incrémentielle manuelle dans les tâches AWS Glue
<a name="materialized-views-manual-incremental-refresh-glue-jobs"></a>

Pour effectuer une actualisation incrémentielle, assurez-vous que l'actualisation incrémentielle est activée dans la configuration de votre session Spark, puis exécutez :

```
spark.sql("REFRESH MATERIALIZED VIEW customer_orders")

# Verify updated results
result = spark.sql("SELECT * FROM customer_orders")
result.show()
```

Le catalogue de données AWS Glue détermine automatiquement si une actualisation incrémentielle est applicable en fonction de la définition de la vue et de la quantité de données modifiées. Si l'actualisation incrémentielle n'est pas possible, l'opération revient à une actualisation complète.

### Rafraîchissant dans les blocs-notes AWS Glue Studio
<a name="materialized-views-refreshing-glue-studio-notebooks"></a>

Dans les ordinateurs portables, utilisez la commande magique %%sql :

```
%%sql
REFRESH MATERIALIZED VIEW customer_orders FULL
```

### Vérification de l'exécution de l'actualisation incrémentielle
<a name="materialized-views-verifying-incremental-refresh"></a>

Pour confirmer que l'actualisation incrémentielle a bien été exécutée, activez la journalisation du débogage dans votre tâche AWS Glue :

```
from awsglue.context import GlueContext
from pyspark.context import SparkContext
import logging

sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session

# Enable debug logging
logger = logging.getLogger('org.apache.spark.sql')
logger.setLevel(logging.DEBUG)

# Execute refresh
spark.sql("REFRESH MATERIALIZED VIEW customer_orders")
```

Recherchez le message suivant dans les journaux des tâches de AWS Glue :

```
DEBUG RefreshMaterializedViewExec: Executed Incremental Refresh
```

## Gestion des vues matérialisées
<a name="materialized-views-managing"></a>

AWS Glue fournit des commandes SQL pour gérer le cycle de vie des vues matérialisées dans vos tâches et carnets de notes.

### Décrire une vue matérialisée
<a name="materialized-views-describing"></a>

Pour afficher les métadonnées relatives à une vue matérialisée, notamment sa définition, son état d'actualisation et l'horodatage de la dernière actualisation :

```
spark.sql("DESCRIBE EXTENDED customer_orders").show(truncate=False)
```

### Modification d'une vue matérialisée
<a name="materialized-views-altering"></a>

Pour modifier le calendrier d'actualisation d'une vue matérialisée existante :

```
spark.sql("""
    ALTER MATERIALIZED VIEW customer_orders 
    ADD SCHEDULE REFRESH EVERY 2 HOURS
""")
```

Pour supprimer l'actualisation automatique :

```
spark.sql("""
    ALTER MATERIALIZED VIEW customer_orders 
    DROP SCHEDULE
""")
```

### Supprimer une vue matérialisée
<a name="materialized-views-dropping"></a>

Pour supprimer une vue matérialisée :

```
spark.sql("DROP MATERIALIZED VIEW customer_orders")
```

Cette commande supprime la définition de la vue matérialisée du catalogue de données AWS Glue et supprime les données de la table Iceberg sous-jacente de votre compartiment S3.

### Répertorier les vues matérialisées
<a name="materialized-views-listing"></a>

Pour répertorier toutes les vues matérialisées d'une base de données :

```
spark.sql("SHOW VIEWS FROM analytics").show()
```

## Autorisations pour les vues matérialisées
<a name="materialized-views-permissions"></a>

Pour créer et gérer des vues matérialisées, vous devez configurer AWS Lake Formation les autorisations. Le rôle IAM qui crée la vue matérialisée (le rôle de définition) nécessite des autorisations spécifiques sur les tables sources et les bases de données cibles.

### Autorisations requises pour le rôle de définisseur
<a name="materialized-views-required-permissions-definer-role"></a>

Le rôle de définition doit disposer des autorisations Lake Formation suivantes :
+ Sur les tables sources : autorisations SELECT ou ALL sans filtres de ligne, de colonne ou de cellule
+ Sur la base de données cible : autorisation CREATE\$1TABLE
+ Sur le catalogue AWS de données Glue GetTable et les autorisations CreateTable d'API

Lorsque vous créez une vue matérialisée, l'ARN du rôle de définition est stocké dans la définition de la vue. Le catalogue de données AWS Glue assume ce rôle lorsqu'il exécute des opérations d'actualisation automatique. Si le rôle de définition perd l'accès aux tables sources, les opérations d'actualisation échoueront tant que les autorisations ne seront pas restaurées.

### Autorisations IAM pour les tâches AWS Glue
<a name="materialized-views-iam-permissions-glue-jobs"></a>

Le rôle IAM de votre tâche AWS Glue nécessite les autorisations suivantes :

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "glue:GetCatalog",
                "glue:GetCatalogs",
                "glue:GetTable",
                "glue:GetTables",
                "glue:CreateTable",
                "glue:UpdateTable",
                "glue:DeleteTable",
                "glue:GetDatabase",
                "glue:GetDatabases",
                "cloudwatch:PutMetricData"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": [
                "arn:aws:logs:*:*:*:/aws-glue/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "lakeformation:GetDataAccess"
            ],
            "Resource": "*"
        }
    ]
}
```

Le rôle que vous utilisez pour l'actualisation automatique de Materialized View doit disposer de l'PassRole autorisation iam : sur le rôle.

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": [
        "arn:aws:iam::111122223333:role/materialized-view-role-name"
      ]
    }
  ]
}
```

Pour que Glue actualise automatiquement la vue matérialisée pour vous, le rôle doit également respecter la politique de confiance suivante qui permet au service d'assumer le rôle.

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": [
        "arn:aws:iam::111122223333:role/materialized-view-role-name"
      ]
    }
  ]
}
```

Si la vue matérialisée est stockée dans des compartiments de tables S3, vous devez également ajouter l'autorisation suivante au rôle.

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3tables:PutTableMaintenanceConfiguration"
      ],
      "Resource": "arn:aws:s3tables:*:123456789012:*"
    }
  ]
}
```

### Octroi de l'accès aux vues matérialisées
<a name="materialized-views-granting-access"></a>

Pour autoriser d'autres utilisateurs à interroger une vue matérialisée, accordez l' AWS Lake Formation autorisation SELECT sur la table des vues matérialisées. Les utilisateurs peuvent interroger la vue matérialisée sans avoir besoin d'accéder directement aux tables sources sous-jacentes.

Pour des informations détaillées sur la configuration des autorisations de Lake Formation, consultez la section Octroi et révocation d'autorisations sur les ressources du catalogue de données dans le manuel du AWS Lake Formation développeur.

## Surveillance des opérations de visualisation matérialisée
<a name="materialized-views-monitoring"></a>

Le AWS Glue Data Catalog publie des statistiques et des journaux pour les opérations d'actualisation des vues matérialisées sur Amazon CloudWatch. Vous pouvez surveiller l'état, la durée et le volume de données traités par le biais de CloudWatch métriques d'actualisation.

### Afficher les journaux des tâches
<a name="materialized-views-viewing-job-logs"></a>

Pour consulter les journaux des tâches AWS Glue qui créent ou actualisent des vues matérialisées, procédez comme suit :

1. Ouvrez la console AWS Glue.

1. Choisissez Jobs dans le volet de navigation.

1. Sélectionnez votre tâche et choisissez Runs.

1. Sélectionnez une exécution spécifique et choisissez Logs pour afficher CloudWatch les journaux.

### Configuration des alarmes
<a name="materialized-views-setting-up-alarms"></a>

Pour recevoir des notifications lorsque les opérations d'actualisation échouent ou dépassent la durée prévue, créez des CloudWatch alarmes sur les métriques des vues matérialisées. Vous pouvez également configurer les EventBridge règles Amazon pour déclencher des réponses automatisées afin d'actualiser les événements.

## Exemple : flux de travail complet
<a name="materialized-views-complete-workflow"></a>

L'exemple suivant illustre un flux de travail complet pour créer et utiliser une vue matérialisée dans AWS Glue.

### Exemple de script AWS de tâche Glue
<a name="materialized-views-example-glue-job-script"></a>

```
import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job

args = getResolvedOptions(sys.argv, ['JOB_NAME'])
sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args['JOB_NAME'], args)

# Create database and base table
spark.sql("CREATE DATABASE IF NOT EXISTS sales")
spark.sql("USE sales")

spark.sql("""
    CREATE TABLE IF NOT EXISTS orders (
        id INT,
        customer_name STRING,
        amount DECIMAL(10,2),
        order_date DATE
    )
""")

# Insert sample data
spark.sql("""
    INSERT INTO orders VALUES 
        (1, 'John Doe', 150.00, DATE('2024-01-15')),
        (2, 'Jane Smith', 200.50, DATE('2024-01-16')),
        (3, 'Bob Johnson', 75.25, DATE('2024-01-17'))
""")

# Create materialized view
spark.sql("""
    CREATE MATERIALIZED VIEW customer_summary
    AS 
    SELECT 
        customer_name, 
        COUNT(*) as order_count, 
        SUM(amount) as total_amount 
    FROM glue_catalog.sales.orders
    GROUP BY customer_name
""")

# Query the materialized view
print("Initial materialized view data:")
spark.sql("SELECT * FROM customer_summary").show()

# Insert additional data
spark.sql("""
    INSERT INTO orders VALUES 
        (4, 'Jane Smith', 350.00, DATE('2024-01-18')),
        (5, 'Bob Johnson', 100.25, DATE('2024-01-19'))
""")

# Refresh the materialized view
spark.sql("REFRESH MATERIALIZED VIEW customer_summary FULL")

# Query updated results
print("Updated materialized view data:")
spark.sql("SELECT * FROM customer_summary").show()

job.commit()
```

### Exemple de bloc-notes AWS Glue Studio
<a name="materialized-views-example-glue-studio-notebook"></a>

```
%%configure
{
    "conf": {
        "spark.sql.extensions": "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions",
        "spark.sql.catalog.glue_catalog": "org.apache.iceberg.spark.SparkCatalog",
        "spark.sql.catalog.glue_catalog.type": "glue",
        "spark.sql.catalog.glue_catalog.warehouse": "s3://amzn-s3-demo-bucket/warehouse",
        "spark.sql.catalog.glue_catalog.glue.region": "us-east-1",
        "spark.sql.catalog.glue_catalog.glue.id": "111122223333",
        "spark.sql.catalog.glue_catalog.glue.account-id": "111122223333",
        "spark.sql.catalog.glue_catalog.glue.lakeformation-enabled": "true",
        "spark.sql.defaultCatalog": "glue_catalog",
        "spark.sql.optimizer.answerQueriesWithMVs.enabled": "true",
        "spark.sql.materializedViews.metadataCache.enabled": "true"
    }
}
```

```
%%sql
CREATE DATABASE IF NOT EXISTS sales
```

```
%%sql
USE sales
```

```
%%sql
CREATE TABLE IF NOT EXISTS orders (
    id INT,
    customer_name STRING,
    amount DECIMAL(10,2),
    order_date DATE
)
```

```
%%sql
INSERT INTO orders VALUES 
    (1, 'John Doe', 150.00, DATE('2024-01-15')),
    (2, 'Jane Smith', 200.50, DATE('2024-01-16')),
    (3, 'Bob Johnson', 75.25, DATE('2024-01-17'))
```

```
%%sql
CREATE MATERIALIZED VIEW customer_summary
AS 
SELECT 
    customer_name, 
    COUNT(*) as order_count, 
    SUM(amount) as total_amount 
FROM glue_catalog.sales.orders
GROUP BY customer_name
```

```
%%sql
SELECT * FROM customer_summary
```

```
%%sql
INSERT INTO orders VALUES 
    (4, 'Jane Smith', 350.00, DATE('2024-01-18')),
    (5, 'Bob Johnson', 100.25, DATE('2024-01-19'))
```

```
%%sql
REFRESH MATERIALIZED VIEW customer_summary FULL
```

```
%%sql
SELECT * FROM customer_summary
```

## Considérations et restrictions
<a name="materialized-views-considerations-limitations"></a>

Lorsque vous utilisez des vues matérialisées avec AWS Glue, tenez compte des points suivants :
+ Les vues matérialisées nécessitent AWS la version 5.1 ou ultérieure de Glue.
+ Les tables sources doivent être des tables Apache Iceberg enregistrées dans le catalogue de données AWS Glue. Les tables Apache Hive, Apache Hudi et Linux Foundation Delta Lake ne sont pas prises en charge au lancement.
+ Les tables sources doivent résider dans la même région et dans le même compte que la vue matérialisée.
+ Toutes les tables sources doivent être régies par AWS Lake Formation. Les autorisations IAM uniquement et l'accès hybride ne sont pas pris en charge.
+ Les vues matérialisées ne peuvent pas faire référence aux vues AWS Glue Data Catalog, aux vues multidialectes ou à d'autres vues matérialisées en tant que tables sources.
+ Le rôle de définition de vues doit disposer d'un accès complet en lecture (autorisation SELECT ou ALL) sur toutes les tables sources sans appliquer de filtres de ligne, de colonne ou de cellule.
+ Les vues matérialisées sont finalement cohérentes avec les tables sources. Pendant la fenêtre d'actualisation, les requêtes peuvent renvoyer des données périmées. Exécutez une actualisation manuelle pour une cohérence immédiate.
+ L'intervalle d'actualisation automatique minimum est d'une heure.
+ L'actualisation incrémentielle prend en charge un sous-ensemble restreint d'opérations SQL. La définition de la vue doit être un seul bloc SELECT-FROM-WHERE-GROUP BY-HAVING et ne peut pas contenir d'opérations définies, de sous-requêtes, le mot clé DISTINCT dans SELECT ou de fonctions d'agrégation, de fonctions de fenêtre ou de jointures autres que INNER JOIN.
+ L'actualisation incrémentielle ne prend pas en charge les fonctions définies par l'utilisateur ni certaines fonctions intégrées. Seul un sous-ensemble des fonctions intégrées de Spark SQL est pris en charge.
+ La réécriture automatique des requêtes ne prend en compte que les vues matérialisées dont les définitions appartiennent à un sous-ensemble SQL restreint similaire aux restrictions d'actualisation incrémentielle.
+ Les identifiants contenant des caractères spéciaux autres que des caractères alphanumériques et des traits de soulignement ne sont pas pris en charge dans les requêtes CREATE MATERIALIZED VIEW. Cela s'applique à tous les types d'identifiant, y compris les catalog/namespace/table noms, les noms de colonnes et de champs de structure CTEs, ainsi que les alias.
+ Les colonnes de vues matérialisées commençant par le préfixe \$1\$1ivm sont réservées à l'utilisation du système. Amazon se réserve le droit de modifier ou de supprimer ces colonnes dans les futures versions.
+ Les clauses SORT BY, LIMIT, OFFSET, CLUSTER BY et ORDER BY ne sont pas prises en charge dans les définitions de vues matérialisées.
+ Les tables sources entre régions et entre comptes ne sont pas prises en charge.
+ Les tables référencées dans la requête de vue doivent utiliser une convention de dénomination en trois parties (par exemple, glue\$1catalog.my\$1db.my\$1table) car l'actualisation automatique n'utilise pas les paramètres de catalogue et de base de données par défaut.
+ Les opérations d'actualisation complète remplacent l'intégralité du tableau et rendent les instantanés précédents indisponibles.
+ Les fonctions non déterministes telles que rand () ou current\$1timestamp () ne sont pas prises en charge dans les définitions de vues matérialisées.