Surveiller et dépanner les charges de travail par lot

Ce document décrit les outils et les fichiers que vous pouvez utiliser pour surveiller et résoudre les problèmes liés aux charges de travail par lot Serverless pour Apache Spark .

Résoudre les problèmes liés aux charges de travail à partir de la Google Cloud console

Lorsqu'un job par lot échoue ou que ses performances sont médiocres, la première étape recommandée consiste à ouvrir sa page Détails du lot à partir de la page Lots de la Google Cloud console.

Utiliser l'onglet "Résumé" : votre hub de dépannage

L'onglet Résumé, sélectionné par défaut lorsque la page Détails du lot s'ouvre, affiche des métriques critiques et des journaux filtrés pour vous aider à effectuer une évaluation initiale rapide de l'état du lot. Après cette évaluation initiale, vous pouvez effectuer une analyse plus approfondie à l'aide d'outils plus spécialisés disponibles sur la page Détails du lot, tels que l'UI Spark, l'explorateur de journaux, et Gemini Cloud Assist.

Points forts des métriques par lot

L'onglet Résumé de la page Détails du lot inclut des graphiques qui affichent des valeurs de métriques importantes pour la charge de travail par lot. Les graphiques de métriques sont remplis une fois l' opération terminée et offrent une indication visuelle des problèmes potentiels tels que la contention des ressources , l'asymétrie des données ou la pression sur la mémoire.

Tableau de bord des métriques par lot.

Tableau des métriques

Le tableau suivant répertorie les métriques de charge de travail Spark affichées sur la page Détails du lot de la Google Cloud console et décrit comment les valeurs de métriques peuvent fournir des insights sur l'état et les performances de la charge de travail.

Métrique Informations fournies
Métriques au niveau de l'exécuteur
Ratio entre le temps de GC JVM et le temps d'exécution Cette métrique indique le ratio entre le temps de GC (garbage collection) JVM et le temps d'exécution par exécuteur. Des ratios élevés peuvent indiquer des fuites de mémoire dans les tâches exécutées sur des exécuteurs spécifiques ou des structures de données inefficaces, ce qui peut entraîner un taux de renouvellement élevé des objets.
Octets de disque répandus Cette métrique indique le nombre total d'octets de disque répandus sur différents exécuteurs. Si un exécuteur affiche un nombre élevé d'octets de disque répandus, cela peut indiquer une asymétrie des données. Si la métrique augmente au fil du temps, cela peut indiquer que certaines étapes sont soumises à une pression sur la mémoire ou à des fuites de mémoire.
Octets lus et écrits Cette métrique indique le nombre d'octets écrits par rapport au nombre d'octets lus par exécuteur. Des écarts importants dans le nombre d'octets lus ou écrits peuvent indiquer des scénarios dans lesquels des jointures répliquées entraînent une amplification des données sur des exécuteurs spécifiques.
Enregistrements lus et écrits Cette métrique indique le nombre d'enregistrements lus et écrits par exécuteur. Un nombre élevé d'enregistrements lus avec un faible nombre d'enregistrements écrits peut indiquer un goulot d'étranglement dans la logique de traitement sur des exécuteurs spécifiques, ce qui entraîne la lecture des enregistrements en attente. Les exécuteurs qui accusent systématiquement un retard dans les lectures et les écritures peuvent indiquer une contention des ressources sur ces nœuds ou des inefficacités de code spécifiques à l'exécuteur.
Ratio entre le temps d'écriture aléatoire et le temps d'exécution La métrique indique le temps passé par l'exécuteur dans le temps d'exécution aléatoire par rapport au temps d'exécution global. Si cette valeur est élevée pour certains exécuteurs, cela peut indiquer une asymétrie des données ou une sérialisation inefficace des données. Vous pouvez identifier les étapes avec des temps d'écriture aléatoire longs dans l'UI Spark. Recherchez les tâches aberrantes au sein de ces étapes qui prennent plus de temps que la moyenne pour s'exécuter. Vérifiez si les exécuteurs avec des temps d'écriture aléatoire élevés présentent également une activité d'E/S de disque élevée. Une sérialisation plus efficace et des étapes de partitionnement supplémentaires peuvent être utiles. Des écritures d'enregistrements très volumineuses par rapport aux lectures d'enregistrements peuvent indiquer une duplication involontaire des données en raison de jointures inefficaces ou de transformations incorrectes.
Métriques au niveau de l'application
Progression des étapes Cette métrique indique le nombre d'étapes en échec, en attente et en cours d'exécution. Un grand nombre d'étapes en échec ou en attente peut indiquer une asymétrie des données. Recherchez les partitions de données et déboguez la raison de l’échec de l’étape à l’aide de l’onglet Étapes de l’UI Spark.
Exécuteurs Spark par lot Cette métrique indique le nombre d'exécuteurs qui peuvent être requis par rapport au nombre d'exécuteurs en cours d'exécution. Une grande différence entre les exécuteurs requis et les exécuteurs en cours d'exécution peut indiquer des problèmes d'autoscaling.
Métriques au niveau de la VM
Mémoire utilisée Cette métrique indique le pourcentage de mémoire de la VM en cours d'utilisation. Si le pourcentage maître est élevé, cela peut indiquer que le pilote est soumis à une pression sur la mémoire. Pour les autres nœuds de VM, un pourcentage élevé peut indiquer que les exécuteurs sont à court de mémoire, ce qui peut entraîner un déversement de disque élevé et un temps d'exécution plus lent de la charge de travail. Utilisez l'UI Spark pour analyser les exécuteurs afin de vérifier si le temps de GC et les échecs de tâches sont élevés. Déboguez également le code Spark pour la mise en cache de grands ensembles de données et la diffusion inutile de variables.

Journaux de la tâche

La page Détails du lot inclut une section Journaux de la tâche qui répertorie les avertissements et les erreurs filtrés à partir des journaux de la tâche (charge de travail par lot). Cette fonctionnalité permet d'identifier rapidement les problèmes critiques sans avoir à analyser manuellement des fichiers journaux volumineux. Vous pouvez sélectionner une Gravité de journal (par exemple, Error) dans le menu déroulant et ajouter un Filtre de texte pour affiner les résultats. Pour effectuer une analyse plus approfondie, cliquez sur l'icône Afficher dans l'explorateur de journaux pour ouvrir les journaux de lot sélectionnés dans l'explorateur de journaux Logs Explorer.

Afficher les journaux de traitement par lot dans Cloud Logging
Afficher les journaux par lot dans Cloud Logging

Exemple : L'explorateur de journaux s'ouvre après avoir sélectionné Errors dans le sélecteur de gravité de la page Détails du lot de la Google Cloud console.

Explorateur de journaux par lot.

UI Spark

L'UI Spark collecte les détails d'exécution d'Apache Spark à partir des charges de travail par lot Serverless pour Apache Spark. La fonctionnalité UI Spark est sans frais et activée par défaut.

Les données collectées par la fonctionnalité UI Spark sont conservées pendant 90 jours. Vous pouvez utiliser cette interface Web pour surveiller et déboguer les charges de travail Spark sans avoir à créer de serveur d'historique persistant.

Autorisations et rôles Identity and Access Management requis

Les autorisations suivantes sont requises pour utiliser la fonctionnalité UI Spark avec les charges de travail par lot.

  • Autorisation de collecte de données : dataproc.batches.sparkApplicationWrite. Cette autorisation doit être accordée au compte de service qui exécute les charges de travail par lot. Cette autorisation est incluse dans le Dataproc Worker rôle, qui est automatiquement accordé au compte de service par défaut Compute Engine utilisé par défaut par Serverless pour Apache Spark (voir Compte de service Serverless pour Apache Spark). Toutefois, si vous spécifiez un compte de service personnalisé pour votre charge de travail par lot, vous devez ajouter l'autorisation dataproc.batches.sparkApplicationWrite à ce compte de service (généralement en accordant au compte de service le rôle Dataproc Worker).

  • Autorisation d'accès à l'UI Spark : dataproc.batches.sparkApplicationRead. Cette autorisation doit être accordée à un utilisateur pour qu'il puisse accéder à l'UI Spark dans la Google Cloud console. Cette autorisation est incluse dans les Dataproc Viewer, Dataproc Editor et Dataproc Administrator rôles. Pour ouvrir l'UI Spark dans la Google Cloud console, vous devez disposer de l'un de ces rôles ou d'un rôle personnalisé qui inclut cette autorisation.

Ouvrir l'UI Spark

La page de l'UI Spark est disponible dans les Google Cloud charges de travail par lot de la console.

  1. Accédez à la page Sessions interactives Serverless pour Apache Spark.

    Accéder à la page "Lots" de Dataproc

  2. Cliquez sur un ID de lot pour ouvrir la page Détails du lot.

  3. Cliquez sur Afficher l'UI Spark dans le menu du haut.

Le bouton Afficher l'UI Spark est désactivé dans les cas suivants :

Journaux Serverless pour Apache Spark

La journalisation est activée par défaut dans Serverless pour Apache Spark, et les journaux de charge de travail persistent une fois la charge de travail terminée. Serverless pour Apache Spark collecte les journaux de charge de travail dans Cloud Logging. Vous pouvez accéder aux journaux Serverless pour Apache Spark sous la Cloud Dataproc Batch ressource dans l'explorateur de journaux.

Interroger les journaux Serverless pour Apache Spark

L'explorateur de journaux de la Google Cloud console fournit un volet de requête pour vous aider à créer une requête permettant d'examiner les journaux de charge de travail par lot. Voici les étapes à suivre pour créer une requête permettant d'examiner les journaux de charge de travail par lot :

  1. Accéder à l'explorateur de journaux

  2. Votre projet actuel est sélectionné. Vous pouvez cliquer sur Affiner le champ d'application Projet pour sélectionner un autre projet.
  3. Définissez une requête de journaux par lot.

    • Utilisez les menus de filtre pour filtrer une charge de travail par lot.

      1. Sous Toutes les ressources, sélectionnez la ressource Cloud Dataproc Batch.

        1. Dans le panneau Sélectionner une ressource, sélectionnez le LIEU du lot, puis l' ID DE LOT. Ces paramètres de lot sont répertoriés sur la page Lots de Dataproc dans la Google Cloud console.

        2. Cliquez sur Appliquer.

        3. Sous Sélectionner des noms de journaux. saisissez dataproc.googleapis.com dans le champ Rechercher des noms de journaux pour limiter les types de journaux à interroger. Sélectionnez un ou plusieurs des noms de fichiers journaux listés.

    • Utilisez l'éditeur de requête pour filtrer les journaux spécifiques à la VM.

      1. Spécifiez le type de ressource et le nom de la ressource de VM, comme indiqué dans l'exemple suivant :

        resource.type="cloud_dataproc_batch"
        labels."dataproc.googleapis.com/resource_name"="gdpic-srvls-batch-BATCH_UUID-VM_SUFFIX"
        
        Notes:

        • BATCH_UUID : l'UUID du lot est indiqué sur la page "Détails du lot" de la Google Cloud console, qui s'ouvre lorsque vous cliquez sur l'ID du lot sur la page Lots.

        Les journaux par lot répertorient également l'UUID du lot dans le nom de la ressource de VM. Voici un exemple tiré d'un fichier batch-driver.log :

  4. Cliquez sur Exécuter la requête.

Types de journaux Serverless pour Apache Spark et exemples de requêtes

La liste suivante décrit différents types de journaux Serverless pour Apache Spark et fournit des exemples de requêtes de l'explorateur de journaux pour chaque type de journal.

  1. dataproc.googleapis.com/output : ce fichier journal contient la sortie de la charge de travail par lot. Serverless pour Apache Spark diffuse la sortie par lot dans l'espace de noms output, et définit le nom de fichier sur JOB_ID.driver.log.

    Exemple de requête de l'explorateur de journaux pour les journaux de sortie :

    resource.type="cloud_dataproc_batch"
    resource.labels.location="REGION"
    resource.labels.batch_id="BATCH_ID"
    logName="projects/PROJECT_ID/logs/dataproc.googleapis.com%2Foutput"
    

  2. dataproc.googleapis.com/spark : l'espace de noms spark agrège les journaux Spark pour les démons et les exécuteurs qui s'exécutent sur les VM maîtres et de nœud de calcul du cluster Dataproc. Chaque entrée de journal inclut un master, worker ou executor libellé de composant pour identifier la source du journal, comme suit :

    • executor : journaux des exécuteurs de code utilisateur. Il s'agit généralement de journaux distribués.
    • master : journaux du maître du gestionnaire de ressources autonome Spark, qui sont semblables aux journaux de Dataproc on Compute Engine YARN ResourceManager.
    • worker : journaux du nœud de calcul du gestionnaire de ressources autonome Spark, qui sont semblables aux journaux NodeManager de Dataproc sur Compute Engine YARN.

    Exemple de requête de l'explorateur de journaux pour tous les journaux de l'espace de noms spark :

    resource.type="cloud_dataproc_batch"
    resource.labels.location="REGION"
    resource.labels.batch_id="BATCH_ID"
    logName="projects/PROJECT_ID/logs/dataproc.googleapis.com%2Fspark"
    

    Exemple de requête de l'explorateur de journaux pour les journaux de composants autonomes Spark dans l'espace de noms spark :

    resource.type="cloud_dataproc_batch"
    resource.labels.location="REGION"
    resource.labels.batch_id="BATCH_ID"
    logName="projects/PROJECT_ID/logs/dataproc.googleapis.com%2Fspark"
    jsonPayload.component="COMPONENT"
    

  3. dataproc.googleapis.com/startup : l'espace de noms startup inclut les journaux de démarrage par lot (cluster). Tous les journaux de script d'initialisation sont inclus. Les composants sont identifiés par un libellé, par exemple :

    startup-script[855]: ... activate-component-spark[3050]: ... enable spark-worker
    
    Exemple de requête de l'explorateur de journaux pour les journaux de démarrage sur une VM spécifiée :
    resource.type="cloud_dataproc_batch"
    resource.labels.location="REGION"
    resource.labels.batch_id="BATCH_ID"
    logName="projects/PROJECT_ID/logs/dataproc.googleapis.com%2Fstartup"
    labels."dataproc.googleapis.com/resource_name"="gdpic-srvls-batch-BATCH_UUID-VM_SUFFIX"
    
  4. dataproc.googleapis.com/agent : l'espace de noms agent agrège les journaux de l'agent Dataproc. Chaque entrée de journal inclut un libellé de nom de fichier qui identifie la source du journal.

    Exemple de requête de l'explorateur de journaux pour les journaux d'agent générés par une VM de nœud de calcul spécifiée :

    resource.type="cloud_dataproc_batch"
    resource.labels.location="REGION"
    resource.labels.batch_id="BATCH_ID"
    logName="projects/PROJECT_ID/logs/dataproc.googleapis.com%2Fagent"
    labels."dataproc.googleapis.com/resource_name"="gdpic-srvls-batch-BATCHUUID-wWORKER#"
    

  5. dataproc.googleapis.com/autoscaler : l'espace de noms autoscaler agrège les journaux de l'autoscaler Serverless pour Apache Spark.

    Exemple de requête de l'explorateur de journaux pour les journaux d'agent générés par une VM de nœud de calcul spécifiée :

    resource.type="cloud_dataproc_batch"
    resource.labels.location="REGION"
    resource.labels.batch_id="BATCH_ID"
    logName="projects/PROJECT_ID/logs/dataproc.googleapis.com%2Fautoscaler"
    labels."dataproc.googleapis.com/resource_name"="gdpic-srvls-batch-BATCHUUID-wWORKER#"
    

Pour en savoir plus, consultez Journaux Dataproc.

Pour en savoir plus sur les journaux d'audit Serverless pour Apache Spark, consultez Journalisation d'audit Dataproc.

Métriques liées aux charges de travail

Serverless pour Apache Spark fournit des métriques par lot et Spark que vous pouvez afficher à partir de l' explorateur de métriques ou de la page Détails du lot de la Google Cloud console.

Métriques par lot

Les métriques de ressource batch Dataproc fournissent des insights sur les ressources par lot, telles que le nombre d'exécuteurs par lot. Les métriques par lot sont précédées du préfixe dataproc.googleapis.com/batch.

Exemple de métrique de lot dans l'explorateur de métriques.

Métriques Spark

Par défaut, Serverless pour Apache Spark active la collecte des métriques Spark disponibles, sauf si vous utilisez des propriétés de collecte de métriques Spark pour désactiver ou remplacer la collecte d'une ou plusieurs métriques Spark.

Les métriques Spark disponibles incluent les métriques du pilote et de l'exécuteur Spark, ainsi que les métriques système. Les métriques Spark disponibles sont précédées du préfixe custom.googleapis.com/.

Exemple de métrique Spark dans l'explorateur de métriques.

Configurer des alertes de métriques

Vous pouvez créer des alertes de métriques Dataproc pour être averti des problèmes liés aux charges de travail.

Créer des graphiques

Vous pouvez créer des graphiques qui visualisent les métriques de charge de travail à l'aide de l' explorateur de métriques de la Google Cloud console. Par exemple, vous pouvez créer un graphique pour afficher disk:bytes_used, puis filtrer par batch_id.

Cloud Monitoring

Monitoring utilise les métadonnées et les métriques de charge de travail pour fournir des insights sur l'état et les performances des charges de travail Serverless pour Apache Spark. Les métriques de charge de travail incluent les métriques Spark, les métriques par lot et les métriques d'opération.

Vous pouvez utiliser Cloud Monitoring dans la Google Cloud console pour explorer les métriques, ajouter des graphiques, créer des tableaux de bord et créer des alertes.

Créer des tableaux de bord

Vous pouvez créer un tableau de bord pour surveiller les charges de travail à l'aide de métriques provenant de plusieurs projets et différents Google Cloud produits. Pour en savoir plus, consultez Créer et gérer des tableaux de bord personnalisés.

Serveur d'historique persistant

Serverless pour Apache Spark crée les ressources de calcul nécessaires à l'exécution d'une charge de travail, l'exécute sur ces ressources, puis supprime les ressources une fois la charge de travail terminée. Les métriques et les événements de charge de travail ne persistent pas une fois la charge de travail terminée. Toutefois, vous pouvez utiliser un serveur d'historique persistant (PHS) pour conserver l'historique des applications de charge de travail (journaux d'événements) dans Cloud Storage.

Pour utiliser un PHS avec une charge de travail par lot, procédez comme suit :

  1. Créez un serveur d'historique persistant (PHS) Dataproc.

  2. Spécifiez votre PHS lorsque vous envoyez une charge de travail.

  3. Utilisez la passerelle des composants pour vous connecter au PHS afin d'afficher les détails de l'application, les étapes du planificateur, les détails au niveau de la tâche, ainsi que les informations sur l'environnement et l'exécuteur.

Réglage automatique

  • Activer le réglage automatique pour Serverless pour Apache Spark : vous pouvez activer le réglage automatique pour Serverless pour Apache Spark lorsque vous envoyez chaque charge de travail par lot Spark récurrente à l'aide de la Google Cloud console, de la CLI gcloud ou de l'API Dataproc.

Console

Procédez comme suit pour activer le réglage automatique sur chaque charge de travail par lot Spark récurrente :

  1. Dans la Google Cloud console, accédez à la page Lots de Dataproc.

    Accéder à la page "Lots" de Dataproc

  2. Pour créer une charge de travail par lot, cliquez sur Créer.

  3. Dans la section Conteneur, saisissez le nom de la cohorte, qui identifie le lot comme faisant partie d'une série de charges de travail récurrentes. L'analyse assistée par Gemini est appliquée à la deuxième charge de travail et aux suivantes envoyées avec ce nom de cohorte. Par exemple, spécifiez TPCH-Query1 comme nom de cohorte pour une charge de travail planifiée qui exécute une requête TPC-H quotidienne.

  4. Remplissez les autres sections de la page Créer un lot selon vos besoins, puis cliquez sur Envoyer. Pour en savoir plus, consultez Envoyer une charge de travail par lot.

gcloud

Exécutez la commande de la CLI gcloud suivante gcloud dataproc batches submit localement dans une fenêtre de terminal ou dans Cloud Shell pour activer le réglage automatique sur chaque charge de travail par lot Spark récurrente :

gcloud dataproc batches submit COMMAND \
    --region=REGION \
    --cohort=COHORT \
    other arguments ...

Remplacez les éléments suivants :

  • COMMAND : type de charge de travail Spark, tel que Spark, PySpark, Spark-Sql ou Spark-R.
  • REGION : la région dans laquelle votre charge de travail sera exécutée.
  • COHORT : nom de la cohorte, qui identifie le lot comme faisant partie d'une série de charges de travail récurrentes. L'analyse assistée par Gemini est appliquée à la deuxième charge de travail et aux suivantes envoyées avec ce nom de cohorte. Par exemple, spécifiez TPCH Query 1 comme nom de cohorte pour une charge de travail planifiée qui exécute une requête TPC-H quotidienne.

API

Incluez le RuntimeConfig.cohort nom dans une requête batches.create pour activer le réglage automatique sur chaque charge de travail par lot Spark récurrente. Le réglage automatique est appliqué à la deuxième charge de travail et aux suivantes envoyées avec ce nom de cohorte. Par exemple, spécifiez TPCH-Query1 comme nom de cohorte pour une charge de travail planifiée qui exécute une requête TPC-H quotidienne.

Exemple :

...
runtimeConfig:
  cohort: TPCH-Query1
...