Partager via


Débogage avec l’interface utilisateur Spark

Cet article décrit quelques options de débogage disponibles pour votre application Apache Spark :

  • Interface utilisateur Spark
  • Journaux des pilotes
  • Journaux d’exécution

Consultez Diagnostiquer des problèmes de coût et de performances à l’aide de l’interface utilisateur Spark pour diagnostiquer les problèmes de coûts et de performances en utilisant l’interface utilisateur Spark.

Interface utilisateur Spark

Une fois que vous démarrez un travail, l’interface utilisateur Spark affiche des informations sur ce qui se passe dans votre application. Pour accéder à l’interface utilisateur Spark, sélectionnez votre calcul dans la page Calcul , puis cliquez sur l’onglet De l’interface utilisateur Spark :

Interface utilisateur Spark

Onglet Streaming

Dans l’interface utilisateur Spark, un onglet Streaming s’affiche si un travail de streaming s’exécute sur le calcul. S’il n’existe aucun travail de streaming en cours d’exécution dans ce calcul, cet onglet n’est pas visible. Vous pouvez passer aux journaux de pilote pour apprendre à vérifier les exceptions qui pourraient être survenues lors du démarrage de la tâche de diffusion en continu.

Cette page vous permet de vérifier si votre application de diffusion en continu reçoit des événements d’entrée de votre source. Par exemple, vous pouvez voir que le travail reçoit 1 000 événements/seconde.

Remarque

Pour TextFileStream, étant donné que les fichiers sont en entrée, le nombre d’événements d’entrée est toujours 0. Dans ce cas, vous pouvez consulter la section Batches terminés dans le bloc-notes pour savoir comment trouver plus d’informations.

Si vous disposez d’une application qui reçoit plusieurs flux d’entrée, vous pouvez cliquer sur le lien Taux d’entrée qui affiche le nombre d’événements reçus pour chaque récepteur.

Temps de traitement

Lorsque vous faites défiler vers le bas, recherchez le graphique pour le temps de traitement. Il s’agit de l’un des graphiques clés pour comprendre les performances de votre travail de diffusion en continu. En règle générale, il est préférable de traiter chaque lot dans un délai de 80% du temps de traitement de votre lot.

Si le temps de traitement moyen est proche ou supérieur à votre intervalle de traitement par lots, votre application de diffusion en continu commencera à accumuler des files d'attente, provoquant bientôt un retard, ce qui peut éventuellement entraîner l'arrêt de votre tâche de diffusion en continu.

Lots terminés

Vers la fin de la page, vous verrez une liste de tous les lots terminés. La page affiche des détails sur les 1 000 derniers lots terminés. À partir de la table, vous pouvez obtenir le nombre d’événements traités pour chaque lot et leur temps de traitement. Si vous souhaitez en savoir plus sur ce qui s'est passé pour l'un des lots, vous pouvez cliquer sur le lien du lot pour accéder à la page Détails du lot.

Page détails du lot

La page Détails de lot contient tous les détails concernant un lot. Deux éléments clés sont les suivants :

  • Entrée : contient des détails sur le processus par lot. Dans ce cas, il contient des détails sur la rubrique Apache Kafka, la partition et les décalages lus par Spark Structured Streaming pour ce lot. Dans le cas de TextFileStream, vous voyez une liste de noms de fichiers lus pour ce lot. Il s’agit du meilleur moyen de démarrer le débogage d’une application de streaming qui lit à partir de fichiers texte.
  • Traitement : vous pouvez cliquer sur le lien vers l’ID de travail qui contient tous les détails sur le traitement effectué pendant ce lot.

Page Détails de la tâche

La page détails du travail affiche une visualisation DAG. Cela est utile pour comprendre l’ordre des opérations et des dépendances pour chaque lot. Par exemple, cela peut montrer qu'une lecture par lots d'une entrée à partir d'un flux direct Kafka est suivie d'une opération de flat map, puis d'une opération de map, et que le flux résultant est ensuite utilisé pour mettre à jour un état global à l’aide d'updateStateByKey.

Les zones grisées représentent des étapes ignorées. Spark est suffisamment intelligent pour ignorer certaines étapes si elles n’ont pas besoin d’être recomputées. Si les données sont mises en point de contrôle ou mises en cache, Spark ignore la recomputation de ces étapes. Dans l’exemple de diffusion en continu précédent, ces étapes correspondent à la dépendance des lots précédents en raison de updateStateBykey. Étant donné que Spark Structured Streaming contrôle en interne le flux et qu’il lit à partir du point de contrôle au lieu de dépendre des lots précédents, ils sont affichés comme des phases grisées.

En bas de la page, vous trouverez également la liste des travaux qui ont été exécutés pour ce lot. Vous pouvez cliquer sur les liens de la description pour approfondir l’exécution au niveau de la tâche.

Page Détails de la tâche

Il s’agit du niveau de débogage le plus précis que vous pouvez accéder à partir de l’interface utilisateur Spark pour une application Spark. Cette page comporte toutes les tâches qui ont été exécutées pour ce lot. Si vous examinez les problèmes de performances de votre application de diffusion en continu, cette page fournit des informations telles que le nombre de tâches exécutées et l'emplacement des exécuteurs sur lesquels elles ont été exécutées, ainsi que les informations de shuffle.

Conseil / Astuce

Vérifiez que les tâches sont exécutées sur plusieurs exécuteurs (nœuds) dans votre calcul pour avoir suffisamment de parallélisme lors du traitement. Si vous avez un seul récepteur, il se peut qu’un seul exécuteur fasse tout le travail même si vous avez plusieurs exécuteurs dans votre calcul.

Dépôt de thread

Un dump de thread montre un instantané des états des threads d'une JVM.

Les vidages de threads sont utiles pour déboguer une tâche bloquée ou à exécution lente. Pour afficher le dépôt de fil d’une tâche spécifique dans l’interface Spark :

  1. Cliquez sur l'onglet Travaux.
  2. Dans la table Tâches, recherchez la tâche cible qui correspond à la décharge de thread que vous souhaitez voir, puis cliquez sur le lien dans la colonne Description.
  3. Dans la table Étapes du travail, recherchez l’étape cible qui correspond au vidage du thread que vous souhaitez voir, puis cliquez sur le lien dans la colonne Description .
  4. Dans la liste tâches de l’étape, recherchez la tâche cible qui correspond au vidage du thread que vous souhaitez voir, puis notez ses valeurs d’ID de tâche et d’exécuteur .
  5. Cliquez sur l’onglet Exécuteurs .
  6. Dans la table Executors , recherchez la ligne qui contient la valeur d’ID d’exécuteur qui correspond à la valeur d’ID d’exécuteur que vous avez notée précédemment. Dans cette ligne, cliquez sur le lien dans la colonne Thread Dump .
  7. Dans la table de vidage de thread pour l'exécuteur, cliquez sur la ligne où la colonne Nom du thread contient TID suivi de la valeur ID de tâche que vous avez notée précédemment. (Si la tâche a terminé l’exécution, vous ne trouverez pas de thread correspondant). Le vidage de fil de la tâche s'affiche.

Les vidages de threads sont également utiles pour le débogage des problèmes où le pilote semble être suspendu (par exemple, aucune barre de progression Spark ne s’affiche) ou n’effectue aucune progression sur les requêtes (par exemple, les barres de progression Spark sont bloquées à 100%). Pour afficher le dump de thread du pilote dans l’interface utilisateur Spark :

  1. Cliquez sur l’onglet Exécuteurs .
  2. Dans le tableau Executors, dans la ligne du pilote, cliquez sur le lien dans la colonne Thread Dump. Le vidage de fil du pilote s’affiche.

Journaux des pilotes

Les journaux de pilotes sont utiles dans les cas suivants :

  • Exceptions : Parfois, vous ne voyez peut-être pas l’onglet Streaming dans l’interface utilisateur Spark. Cela est dû au fait que le travail de diffusion en continu n’a pas été démarré en raison d’une exception. Vous pouvez examiner les journaux du pilote pour analyser les traces des exceptions. Dans certains cas, le travail de diffusion en continu peut avoir démarré correctement. Mais vous verrez que tous les lots ne vont jamais à la section Lots terminés. Ils peuvent tous être en cours de traitement ou d’état d’échec. Dans ces cas, les journaux de pilotes sont également utiles pour comprendre la nature des problèmes sous-jacents.
  • Impressions : toutes les instructions d’impression dans le cadre du DAG s’affichent également dans les journaux.

Remarque

Les utilisateurs qui peuvent accéder aux journaux du pilote dépendent du mode d’accès de la ressource de calcul. Pour le calcul avec le mode d’accès Standard , seuls les administrateurs de l’espace de travail peuvent accéder aux journaux de pilotes. Pour le calcul avec le mode d’accès dédié , les administrateurs d’utilisateurs ou de groupes et d’espaces de travail dédiés peuvent accéder aux journaux du pilote.

Journaux d’exécution

Les journaux d’exécution sont utiles si vous voyez que certaines tâches se comportent mal et que vous souhaitez voir les journaux d’activité pour des tâches spécifiques. Dans la page des détails de la tâche indiquée ci-dessus, vous pouvez obtenir l’exécuteur sur lequel la tâche a été exécutée. Une fois que vous l’avez, vous pouvez accéder à la page de l’interface utilisateur de calcul, cliquer sur les nœuds #, puis le maître. La page principale répertorie tous les travailleurs. Vous pouvez choisir le worker où la tâche suspecte a été exécutée, puis accéder à la sortie log4j.

Remarque

Les journaux d’exécution ne sont pas disponibles pour le calcul avec le mode d’accès Standard . Pour le calcul avec le mode d’accès dédié , les administrateurs d’utilisateurs ou de groupes et d’espaces de travail dédiés peuvent accéder aux journaux d’exécution.