Surveiller et résoudre les problèmes liés aux charges de travail par lot Dataproc sans serveur

Ce document explique comment surveiller et résoudre les problèmes liés à Dataproc Serverless pour les charges de travail par lot Spark à l'aide de l'interface utilisateur Spark.

UI Spark

L'UI Spark collecte les détails d'exécution Apache Spark à partir de Dataproc sans serveur pour les charges de travail par lot Spark. L'utilisation de l'interface utilisateur Spark, qui est activée par défaut, est gratuite.

Les données collectées par la fonctionnalité d'interface utilisateur 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 un serveur d'historique persistant.

Autorisations et rôles Identity and Access Management requis

Vous devez disposer des autorisations suivantes pour utiliser la fonctionnalité d'UI Spark avec des charges de travail par lot.

  • Autorisation de collecte des 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 rôle Dataproc Worker, qui est automatiquement accordé au compte de service Compute Engine par défaut utilisé par défaut par Dataproc sans serveur (voir Compte de service Dataproc sans serveur). 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 Worker Dataproc).

  • 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'interface utilisateur Spark dans la console Google Cloud. Cette autorisation est incluse dans les rôles Dataproc Viewer, Dataproc Editor et Dataproc Administrator. Pour ouvrir l'interface utilisateur Spark dans la console Google Cloud, vous devez disposer de l'un de ces rôles ou d'un rôle personnalisé incluant cette autorisation.

Ouvrir l'UI Spark

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

  1. Accédez à la page Sessions interactives Dataproc sans serveur.

    Accéder à la page "Lots" de Dataproc

  2. Cliquez sur un ID de lot pour ouvrir la page d'informations sur le 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:

Limites

L'UI Spark n'est pas compatible avec les charges de travail Dataproc sans serveur suivantes:

Serveur d'historique persistant

Dataproc sans serveur pour Spark crée les ressources de calcul nécessaires pour exécuter une charge de travail, l'exécute sur ces ressources, puis les supprime une fois la charge de travail terminée. Les métriques et les événements de la 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 la charge de travail (journaux des é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 des informations sur l'environnement et l'exécuteur.

Journaux Dataproc sans serveur pour Spark

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

Interroger les journaux Dataproc sans serveur pour Spark

L'explorateur de journaux de la console Google Cloud fournit un volet de requête pour vous aider à créer une requête afin 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 du 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 l'EMPLACEMENT du lot, puis l'ID DE LOT. Ces paramètres de lot sont répertoriés sur la page Lots de Dataproc dans la console Google Cloud.

        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 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"
        
        Remarques:

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

        Les journaux de lot indiquent également l'UUID du lot dans le nom de la ressource de VM. Voici un exemple de fichier driver.log par lot:

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

Types de journaux et exemples de requêtes dans Dataproc sans serveur pour Spark

La liste suivante décrit différents types de journaux Dataproc sans serveur 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. Dataproc sans serveur pour 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 regroupe les journaux Spark pour les daemons et les exécuteurs exécutés sur les VM maître et de travail du cluster Dataproc. Chaque entrée de journal inclut un libellé de composant master, worker ou executor pour identifier la source de 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 ResourceManager YARN Dataproc sur Compute Engine.
    • worker: journaux du worker du gestionnaire de ressources autonome Spark, qui sont similaires 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 regroupe 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 travail 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 regroupe les journaux de l'autoscaler Dataproc sans serveur pour Spark.

    Exemple de requête de l'explorateur de journaux pour les journaux d'agent générés par une VM de travail 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 la section Journaux Dataproc.

Journaux d'audit Dataproc sans serveur

Pour en savoir plus sur les journaux d'audit Dataproc sans serveur, consultez la section Journalisation d'audit Dataproc.

Métriques liées aux charges de travail

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

Vous pouvez afficher les métriques de charge de travail à partir de l'explorateur de métriques ou de la page Détails du lot dans la console Google Cloud.

Métriques de lot

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

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

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étrique

Vous pouvez créer des alertes de métrique Dataproc pour être averti des problèmes de charge 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 dans la console Google Cloud. Par exemple, vous pouvez créer un graphique pour afficher disk:bytes_used, puis filtrer par batch_id.

Cloud Monitoring

La surveillance utilise les métadonnées et les métriques des charges de travail pour fournir des insights sur l'état et les performances des charges de travail Dataproc sans serveur pour Spark. Les métriques de charge de travail incluent les métriques Spark, les métriques de lot et les métriques d'opération.

Vous pouvez utiliser Cloud Monitoring dans la console Google Cloud pour explorer des métriques, ajouter des graphiques, créer des tableaux de bord et 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 de différents produits Google Cloud. Pour en savoir plus, consultez la section Créer et gérer des tableaux de bord personnalisés.

Dépannage avancé (aperçu)

Cette section présente les fonctionnalités de dépannage avancées (Preview) disponibles dans la console Google Cloud. Ces fonctionnalités incluent le dépannage assisté par Gemini pour Dataproc sans serveur, qui fait partie de l'offre Gemini dans BigQuery.

Accès aux fonctionnalités en preview

Pour vous inscrire à la version preview des fonctionnalités de dépannage avancées, remplissez et envoyez le formulaire d'inscription à l'offre de pré-DG Gemini dans BigQuery. Une fois le formulaire approuvé, les projets listés dans le formulaire ont accès aux fonctionnalités en version preview.

Aperçu des tarifs

La participation à la version Preview n'entraîne aucuns frais supplémentaires. Des frais seront appliqués aux fonctionnalités Preview suivantes lorsqu'elles seront en disponibilité générale:

Un préavis des débits GA sera envoyé à l'adresse e-mail que vous indiquez dans le formulaire d'inscription de l'aperçu.

Exigences concernant les fonctionnalités

  • Inscription: vous devez vous inscrire à cette fonctionnalité.

  • Autorisation:vous devez disposer de l'autorisation dataproc.batches.analyze.

    gcloud iam roles update CUSTOM_ROLE_ID --project=PROJECT_ID \
    --add-permissions="dataproc.batches.analyze"
    
  • Activer le dépannage assisté par Gemini pour Dataproc sans serveur:vous activez le dépannage assisté par Gemini pour Dataproc sans serveur lorsque vous envoyez chaque charge de travail par lot Spark récurrente à l'aide de la console Google Cloud, de la gcloud CLI ou de l'API Dataproc. Une fois cette fonctionnalité activée pour une charge de travail par lot récurrente, Dataproc stocke une copie des journaux de la charge de travail pendant 30 jours et utilise les données de journal enregistrées pour fournir un dépannage assisté par Gemini pour la charge de travail. Pour en savoir plus sur le contenu des journaux de la charge de travail Spark, consultez la page Journaux Dataproc sans serveur pour Spark.

Console

Pour activer le dépannage assisté par Gemini sur chaque charge de travail par lot Spark récurrente, procédez comme suit:

  1. Dans la console Google Cloud, 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 Container (Conteneur), indiquez 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. Renseignez les autres sections de la page Créer un lot si nécessaire, puis cliquez sur Envoyer. Pour en savoir plus, consultez la section Envoyer une charge de travail par lot.

gcloud

Exécutez la commande gcloud dataproc batches submit de la gcloud CLI suivante en local dans une fenêtre de terminal ou dans Cloud Shell pour activer le dépannage assisté par Gemini 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: 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 aux deuxièmes charges de travail et 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 nom RuntimeConfig.cohort dans une requête batches.create pour activer le dépannage assisté par Gemini sur chaque charge de travail de lot Spark récurrente. L'analyse assistée par Gemini est appliquée aux deuxièmes charges de travail et 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
...

Résolution des problèmes avec Gemini pour Dataproc sans serveur

Les fonctionnalités de dépannage en avant-première assistées par Gemini suivantes sont disponibles sur les pages de liste Détails du lot et Lots de la console Google Cloud.

  • Onglet Investiguer: l'onglet "Investiguer" de la page Détails du lot fournit une section "Vue d'ensemble de l'état (aperçu)" avec les panneaux de dépannage assistés par Gemini suivants:

    • Quel élément a été réglé automatiquement ? Si vous avez activé l'autotuning sur une ou plusieurs charges de travail, ce panneau affiche les modifications d'autotuning les plus récentes qui ont été appliquées aux charges de travail en cours d'exécution, terminées et ayant échoué.

    Panneau d'investigation de l'optimisation automatique.

    • Que se passe-t-il actuellement ? et Que puis-je faire ? Cliquez sur Demander à Gemini pour demander des recommandations pour résoudre les problèmes de charges de travail ayant échoué ou améliorer les charges de travail réussies, mais lentes.

    Bouton "Demander à Gemini".

    Si vous cliquez sur Demander à Gemini, Gemini pour Google Cloud génère un résumé des erreurs, anomalies ou points forts des journaux de charge de travail, des métriques Spark et des événements Spark. Gemini pour Google Cloud peut également afficher une liste d'étapes recommandées à suivre pour corriger une charge de travail ayant échoué ou améliorer les performances d'une charge de travail réussie, mais lente.

    Insights générés par Gemini pour Google Cloud.

  • Colonnes de dépannage assisté par Gemini:dans la version preview, la page de liste Lots de Dataproc dans la console Google Cloud inclut les colonnes What was Autotuned, What is happening now? et What can I do about it?.

    Les lots listent les colonnes Gemini.

    Le bouton Demander à Gemini ne s'affiche et n'est activé que si un lot terminé est dans un état Failed, Cancelled ou Succeeded. Si vous cliquez sur Demander à Gemini, Gemini pour Google Cloud génère un résumé des erreurs, anomalies ou points forts des journaux de charge de travail, des métriques Spark et des événements Spark. Gemini pour Google Cloud peut également afficher une liste d'étapes recommandées à suivre pour corriger une charge de travail ayant échoué ou améliorer les performances d'une charge de travail réussie, mais lente.

Points forts des métriques par lot

Dans la version Preview, la page Détails du lot de la console Google Cloud inclut des graphiques qui affichent des valeurs de métriques importantes pour la charge de travail par lot. Les graphiques de métriques sont renseignés avec des valeurs une fois le lot terminé.

Tableau de bord des métriques par lot

Tableau des métriques

Le tableau suivant liste les métriques de charge de travail Spark affichées sur la page Détails de la tâche par lot de la console Google Cloud, et décrit comment les valeurs de métrique peuvent fournir des insights sur l'état et les performances de la charge de travail.

Métrique Quelles informations sont affichées ?
Métriques au niveau de l'exécuteur
Ratio de la durée de récupération de mémoire JVM par rapport au temps d'exécution Cette métrique indique le ratio entre la durée du GC (garbage collection) JVM et l'environnement 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 particuliers ou des structures de données inefficaces, ce qui peut entraîner un taux de rotation élevé des objets.
Octets du disque répandus Cette métrique indique le nombre total d'octets de disque déversés sur différents exécuteurs. Si un exécuteur affiche un nombre élevé d'octets de disque déversés, cela peut indiquer un décalage des données. Si la métrique augmente au fil du temps, cela peut indiquer que certaines étapes sont soumises à une pression de mémoire ou à des fuites de mémoire.
Octets lus et écrits Cette métrique indique les octets écrits par rapport aux octets lus par exécuteur. De grandes différences entre les octets lus ou écrits peuvent indiquer des scénarios où les 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 les enregistrements lus et écrits par exécuteur. Un grand nombre 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 d'enregistrements en attente. Les exécuteurs qui enregistrent des retards constants lors des lectures et des écritures peuvent indiquer un conflit de ressources sur ces nœuds ou des inefficacités de code spécifiques à l'exécuteur.
Ratio du temps d'écriture aléatoire au temps d'exécution La métrique indique le temps passé par l'exécuteur pendant l'exécution de la lecture aléatoire par rapport à l'exécution globale. Si cette valeur est élevée pour certains exécuteurs, cela peut indiquer un décalage des données ou une sérialisation des données inefficace. Vous pouvez identifier les étapes avec des temps d'écriture de mélange longs dans l'interface utilisateur de Spark. Recherchez les tâches atypiques de ces étapes qui prennent plus de temps que la moyenne. Vérifiez si les exécuteurs présentant des temps d'écriture de mélange élevés affichent également une activité d'E/S de disque élevée. Une sérialisation plus efficace et des étapes de partitionnement supplémentaires peuvent vous aider. Un nombre très élevé d'écritures d'enregistrements par rapport aux lectures d'enregistrements peut indiquer une duplication de données involontaire due à des jointures inefficaces ou à des 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 ayant échoué ou en attente peut indiquer un décalage des données. Recherchez des 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 pouvant être requis par rapport au nombre d'exécuteurs en cours d'exécution. Une grande différence entre les exécuteurs requis et ceux 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 utilisée. Si le pourcentage de maître est élevé, cela peut indiquer que le pilote est sous pression de 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 gaspillage de disque important et un temps d'exécution de la charge de travail plus lent. Utilisez l'UI Spark pour analyser les exécuteurs afin de vérifier si le temps de GC et les échecs de tâche sont élevés. Débogage du code Spark pour le cache des ensembles de données volumineux et la diffusion inutile de variables.

Journaux de la tâche

Dans la version Preview, la page Détails du lot de la console Google Cloud liste les journaux de la tâche (charge de travail par lot). Les journaux incluent les avertissements et les erreurs filtrés à partir de la sortie de la charge de travail et des journaux Spark. Vous pouvez sélectionner la gravité des journaux, ajouter un filtre,puis cliquer sur l'icône Afficher dans l'explorateur de journaux pour ouvrir les journaux de lot sélectionnés dans l'explorateur de journaux.

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

Explorateur de journaux par lot.