Utiliser les fonctionnalités étendues du serveur d’historique Apache Spark pour déboguer et diagnostiquer des applications Spark

Cet article vous montre comment utiliser les fonctionnalités étendues du serveur d’historique Apache Spark étendu pour déboguer et diagnostiquer des applications Spark terminées ou en cours d’exécution. L’extension comprend les onglets Data, Graph et Diagnosis. Sous l’onglet Data, vous pouvez vérifier les données d’entrée et de sortie du travail Spark. Sous l’onglet Graph, vous pouvez vérifier le flux de données et lire à nouveau le graphe des travaux. Sous l’onglet Diagnosis, vous pouvez voir les fonctionnalités d’asymétrie des données, d’asymétrie temporelle et d’analyse de l’utilisation des exécuteurs.

Accéder au serveur d’historique Spark

Le serveur d’historique Spark est l’interface utilisateur web pour les applications Spark terminées et en cours d’exécution. Vous pouvez l’ouvrir à partir du portail Azure ou d’une URL.

Ouvrir l’interface utilisateur web du serveur d’historique Spark à partir du portail Azure

  1. À partir du portail Azure, ouvrez le cluster Spark. Pour plus d’informations, voir Énumération et affichage des clusters.

  2. Dans Tableaux de bord du cluster, sélectionnez Serveur d’historique Spark. Lorsque vous y êtes invité, entrez les informations d’identification d’administrateur pour le cluster Spark.

    Launch the Spark History Server from the Azure portal. portail Azure." border="true":::

Ouvrir l’interface utilisateur web du serveur d’historique Spark au moyen d’une URL

Ouvrez le serveur d’historique Spark en accédant à https://CLUSTERNAME.azurehdinsight.net/sparkhistory, où CLUSTERNAME est le nom de votre cluster Spark.

L’interface utilisateur web du serveur d’historique Spark peut être similaire à l’image suivante :

The Spark History Server page.

Utiliser l’onglet Data du serveur d’historique Spark

Sélectionnez l’ID du travail, puis sélectionnez Data dans le menu des outils pour afficher la vue des données.

  • Examinez les entrées, les sorties et les opérations de table en sélectionnant les onglets individuels.

    Data tabs on the Data for Spark Application page.

  • Copiez toutes les lignes en sélectionnant le bouton Copy.

    Copy data on the Spark application page.

  • Enregistrez toutes les données sous la forme d’un fichier CSV en sélectionnant le bouton csv.

    Save data as a .CSV file from the Data for Spark Application page.

  • Effectuez des recherches dans les données en entrant des mots clés dans le champ Search. Les résultats de recherche sont affichés immédiatement.

    Search data on the Data for Spark Application page.

  • Sélectionnez l’en-tête de colonne pour trier la table. Sélectionnez le signe plus (+) pour développer une ligne et afficher plus de détails. Sélectionnez le signe moins (-) pour réduire une ligne.

    The data table on the Data for Spark Application page.

  • Téléchargez un fichier unique en sélectionnant le bouton Partial Download (Téléchargement partiel) à droite. Le fichier sélectionné est téléchargé localement. Si le fichier n’existe plus, un nouvel onglet s’ouvre pour afficher les messages d’erreur.

    The data download row on the Data for Spark Application page.

  • Copiez un chemin complet ou un chemin relatif en sélectionnant l’option Copy Full Path (Copier le chemin complet) ou l’option Copy Relative Path (Copier le chemin relatif), qui étendent le menu de téléchargement. Pour les fichiers Azure Data Lake Storage, sélectionnez Open in Azure Storage Explorer (Ouvrir dans l’Explorateur Stockage Azure) pour lancer l’Explorateur Stockage Azure et localiser le dossier après la connexion.

    Copy Full Path and Copy Relative Path options on the Data for Spark Application page.

  • Si le nombre de lignes à afficher sur une seule page est trop important, sélectionnez les numéros de page en bas de la table pour naviguer.

    Page numbers on the Data for Spark Application page.

  • Pour plus d’informations, pointez sur le point d’interrogation en regard de Data for Spark Application, ou sélectionnez-le, pour afficher l’info-bulle.

    Get more information from the Data for Spark Application page.

  • Pour envoyer des commentaires sur les problèmes, sélectionnez Provide us feedback (Envoyez-nous vos commentaires).

    Provide feedback from the Data for Spark Application page.

Utiliser l’onglet Graph du serveur d’historique Spark

  • Sélectionnez l’ID de travail, puis sélectionnez Graph dans le menu des outils pour afficher le graphe de travail. Par défaut, le graphe affiche tous les travaux. Filtrez les résultats à l’aide du menu déroulant Job ID (ID de travail).

    The Job ID drop-down menu on the Spark Application & Job Graph page.

  • L’option Progress est sélectionnée par défaut. Vérifiez le flux de données en sélectionnant Read (Données lues) ou Written (Données écrites) dans le menu déroulant Display (Affichage).

    Check the data flow on the Spark Application & Job Graph page.

  • La couleur d’arrière-plan de chaque tâche correspond à une carte thermique.

    The heat map on the Spark Application & Job Graph page.

    Couleur Description
    Vert le travail s’est correctement effectué.
    Orange La tâche a échoué, mais cela n’affecte pas le résultat final du travail. Ces tâches comportent des instances dupliquées ou renouvelées qui peuvent réussir ultérieurement.
    Bleu la tâche est en cours d’exécution.
    White la tâche est en attente d’exécution, ou la phase a été ignorée.
    Rouge la tâche a échoué.

    Running a task on the Spark Application & Job Graph page.

    Les phases ignorées s’affichent en blanc. A skipped task on the Spark Application & Job Graph page.

    A failed task on the Spark Application & Job Graph page.

    Remarque

    La lecture est disponible pour les travaux terminés. Sélectionnez le bouton Playback (Lecture) pour relire le travail. Arrêtez le travail à tout moment en sélectionnant le bouton d’arrêt. Lorsqu’un travail est relu, chaque tâche affiche son état à l’aide d’une couleur. La lecture n’est pas prise en charge pour des travaux incomplets.

  • Faites défiler pour effectuer un zoom avant/arrière du graphe de travail, ou sélectionnez Zoom to fit (Zoom d’ajustement) pour l’ajuster à l’écran.

    Select Zoom to fit on the Spark Application & Job Graph page.

  • Lorsque des tâches échouent, pointez sur le nœud du graphe pour afficher l’info-bulle, puis sélectionnez la phase pour l’ouvrir dans une nouvelle page.

    View the tooltip on the Spark Application & Job Graph page.

  • Dans la page Spark Application & Job Graph, les phases affichent des info-bulles et de petites icônes si les tâches remplissent les conditions suivantes :

    • Asymétrie des données : taille de lecture des données > taille moyenne de lecture des données de toutes les tâches à l’intérieur de cette phase * 2 et taille de lecture des données > 10 Mo.

    • Asymétrie temporelle : durée d’exécution > durée d’exécution moyenne de toutes les tâches à l’intérieur de cette phase * 2 et durée d’exécution > 2 minutes.

      The skewed task icon on the Spark Application & Job Graph page.

  • Le nœud du graphe de travail affiche les informations suivantes sur chaque phase :

    • id

    • Nom ou description

    • Nombre total de tâches

    • Lecture de données : somme de la taille d’entrée et de la taille de lecture aléatoire

    • Écriture de données : somme de la taille de sortie et de la taille d’écriture aléatoire

    • Durée d’exécution : durée entre l’heure de début de la première tentative et l’heure de fin de la dernière tentative

    • Nombre de lignes : somme des enregistrements d’entrée, des enregistrements de sortie, des enregistrements de lecture aléatoire et des enregistrements d’écriture aléatoire

    • Progress

      Notes

      Par défaut, le nœud de graphe de travail affiche les informations de la dernière tentative de chaque phase (à l’exception de la durée d’exécution de la phase). Toutefois, pendant la lecture, le nœud de graphe de travail affiche des informations sur chaque tentative.

      Notes

      Pour les tailles de lecture et d’écriture de données, nous utilisons 1 Mo = 1 000 Ko = 1 000 * 1 000 octets.

  • Envoyez des commentaires sur les problèmes en sélectionnant Provide us feedback (Envoyez-nous vos commentaires).

    The feedback option on the Spark Application & Job Graph page.

Utiliser l’onglet Diagnosis du serveur d’historique Spark

Sélectionnez l’ID de travail, puis sélectionnez Diagnosis dans le menu des outils pour afficher la vue de diagnostic de travail. L’onglet Diagnosis comprend Data Skew (Asymétrie des données), Time Skew (Asymétrie temporelle) et Executor Usage Analysis (Analyse de l’utilisation des exécuteurs).

  • Examinez l’Asymétrie des données, l’asymétrie temporelle et l’Analyse de l’utilisation de l’exécuteur en sélectionnant respectivement chaque onglet.

    The Data Skew tab within the Diagnosis tab.

Asymétrie des données

Sélectionnez l’onglet Data Skew (Asymétrie des données). Les tâches asymétriques correspondantes s’affichent en fonction des paramètres spécifiés.

Spécifier les paramètres

La section Specify Parameters (Spécifier les paramètres) affiche les paramètres qui sont utilisés pour détecter l’asymétrie des données. La règle par défaut est : Les données lues de tâche sont supérieures au triple de la moyenne des données lues de tâche, et les données lues de tâche sont supérieures à 10 Mo. Si vous souhaitez définir votre propre règle pour les tâches asymétriques, vous pouvez choisir vos paramètres. Les sections Phase asymétrique et Graphique d’asymétrie sont mises à jour en conséquence.

Phase asymétrique

La section Skewed Stage (Phase asymétrique) affiche les phases comportant des tâches asymétriques qui répondent aux critères spécifiés. Si plusieurs tâches asymétriques figurent dans une phase, la section Skewed Stage (Phase asymétrique) affiche uniquement la tâche la plus décalée (à savoir, le plus important volume de données pour l’asymétrie des données).

Larger view of the Data Skew tab within the Diagnosis tab.

Graphique d’asymétrie

Lorsque vous sélectionnez une ligne de la table Skew Stage (Phase asymétrique), le graphique d’asymétrie affiche plus de détails sur les distributions des tâches en fonction des données lues et de la durée d’exécution. Les tâches asymétriques sont marquées en rouge et les tâches normales sont marquées en bleu. Pour des considérations liées aux performances, le graphique affiche jusqu’à 100 exemples de tâches. Les détails des tâches s’affichent dans le volet inférieur droit.

The Skew Chart for Stage 10 in the Spark UI.

Asymétrie temporelle

L’onglet Time Skew affiche les tâches asymétriques en fonction de la durée d’exécution des tâches.

Spécifier les paramètres

La section Specify Parameters (Spécifier les paramètres) affiche les paramètres qui sont utilisés pour détecter l’asymétrie temporelle. La règle par défaut est : La durée d’exécution des tâches est plus de trois fois supérieure à la durée d’exécution moyenne et supérieure à 30 secondes. Vous pouvez changer les paramètres en fonction de vos besoins. Les sections Skewed Stage (Phase asymétrique) et Skew Chart (Graphique d’asymétrie) affichent les phases correspondantes et les informations de tâche, tout comme dans l’onglet Data Skew (Asymétrie des données).

Lorsque vous sélectionnez Time Skew (Asymétrie temporelle), le résultat filtré s’affiche dans la section Skewed Stage (Phase asymétrique), en fonction des paramètres définis dans la section Specify Parameters (Spécifier les paramètres). Lorsque vous sélectionnez un élément dans la section Skewed Stage (Phase asymétrique), le graphique correspondant est illustré dans la troisième section et les détails des tâches sont affichés dans le volet inférieur droit.

The Time skew tab within the Diagnosis tab.

Graphes d’analyse de l’utilisation des exécuteurs

Le graphe de l’utilisation des exécuteurs affiche l’allocation réelle des exécuteurs du travail et leur état d’exécution.

Lorsque vous sélectionnez Executor Usage Analysis (Analyse de l’utilisation des exécuteurs), quatre courbes différentes relatives à l’utilisation des exécuteurs sont tracées : Allocated Executors (Exécuteurs alloués), Running Executors (Exécuteurs en cours d’exécution), Idle Executors (Exécuteurs inactifs) et Max Executor Instances (Nombre maximal d’instances d’exécuteur). Chaque événement d’ajout d’exécuteur ou de suppression d’exécuteur augmente ou diminue le nombre d’exécuteurs alloués. Vous pouvez consulter la chronologie des événements dans l’onglet Jobs (Travaux) pour effectuer d’autres comparaisons.

The Executor Usage Analysis tab within the Diagnosis tab.

Sélectionnez l’icône de couleur pour sélectionner ou désélectionner le contenu correspondant dans tous les brouillons.

Select the chart in the Executor Usage Analysis tab.

FAQ

Comment revenir à la version de la communauté ?

Pour revenir à la version de la communauté, suivez les étapes ci-dessous :

  1. Ouvrez le cluster dans Ambari.

  2. Accédez à Spark2>Configs.

  3. Sélectionnez Custom spark2-defaults (Valeurs spark2-defaults personnalisées).

  4. Sélectionnez Add Property ... (Ajouter une propriété).

  5. Ajoutez spark.ui.enhancement.enabled=false et enregistrez-le.

  6. La propriété est maintenant définie sur false.

  7. Sélectionnez Enregistrer pour enregistrer la configuration.

    Turn off a feature in Apache Ambari.

  8. Sélectionnez Spark2 dans le volet gauche. Ensuite, sous l’onglet Summary (Résumé), sélectionnez Spark2 History Server (Serveur d’historique Spark2).

    The summary view in Apache Ambari.

  9. Pour redémarrer le serveur d’historique Spark, sélectionnez le bouton Started (Démarré) à droite de Spark2 History Server (Serveur d’historique Spark2), puis sélectionnez Restart (Redémarrer) dans le menu déroulant.

    Restart the Spark History Server in Apache Ambari.

  10. Actualisez l’interface utilisateur web du serveur d’historique Spark. Il revient à la version de la communauté.

Comment charger un événement de serveur d’historique Spark pour le signaler en tant que problème ?

Si vous rencontrez une erreur au niveau du serveur d’historique Spark, procédez comme suit pour signaler l’événement.

  1. Téléchargez l’événement en sélectionnant Download dans l’interface utilisateur web du serveur d’historique Spark.

    Download the event in the Spark History Server UI.

  2. Sélectionnez Provide us feedback (Envoyez-nous vos commentaires) à partir de la page Spark Application & Job Graph (Application Spark et graphe de travail).

    Provide feedback on the Spark Application & Job Graph page.

  3. Fournissez le titre et une description de l’erreur. Ensuite, faites glisser le fichier .zip vers le champ d’édition et sélectionnez Submit new issue (Envoyer nouveau problème).

    Upload and submit a new issue.

Comment mettre à niveau un fichier .jar dans un scénario de correctif logiciel ?

Si vous souhaitez effectuer une mise à niveau avec un correctif logiciel, utilisez le script suivant pour mettre à niveau spark-enhancement.jar*.

upgrade_spark_enhancement.sh :

 #!/usr/bin/env bash

 # Copyright (C) Microsoft Corporation. All rights reserved.

 # Arguments:
 # $1 Enhancement jar path

 if [ "$#" -ne 1 ]; then
     >&2 echo "Please provide the upgrade jar path."
     exit 1
 fi

 install_jar() {
     tmp_jar_path="/tmp/spark-enhancement-hotfix-$( date +%s )"

     if wget -O "$tmp_jar_path" "$2"; then
         for FILE in "$1"/spark-enhancement*.jar
         do
             back_up_path="$FILE.original.$( date +%s )"
             echo "Back up $FILE to $back_up_path"
             mv "$FILE" "$back_up_path"
             echo "Copy the hotfix jar file from $tmp_jar_path   to $FILE"
             cp "$tmp_jar_path" "$FILE"

             "Hotfix done."
             break
         done
     else    
         >&2 echo "Download jar file failed."
         exit 1
     fi
 }

 jars_folder="/usr/hdp/current/spark2-client/jars"
 jar_path=$1

 if ls ${jars_folder}/spark-enhancement*.jar 1>/dev/null 2>&1;   then
     install_jar "$jars_folder" "$jar_path"
 else
     >&2 echo "There is no target jar on this node. Exit with no action."
     exit 0
 fi

Usage

upgrade_spark_enhancement.sh https://${jar_path}

Exemple

upgrade_spark_enhancement.sh https://${account_name}.blob.core.windows.net/packages/jars/spark-enhancement-${version}.jar

Utiliser le fichier Bash à partir du Portail Azure

  1. Lancez le Portail Azure, puis sélectionnez votre cluster.

  2. Exécutez une action de script avec les paramètres ci-dessous.

    Propriété Valeur
    Type de script - Personnalisé
    Nom UpgradeJar
    URI de script bash https://hdinsighttoolingstorage.blob.core.windows.net/shsscriptactions/upgrade_spark_enhancement.sh
    Type(s) de nœud Head, Worker
    Paramètres https://${account_name}.blob.core.windows.net/packages/jars/spark-enhancement-${version}.jar

    Azure portal submit script action.

Problèmes connus

  • Actuellement, le serveur d’historique Spark fonctionne uniquement pour Spark 2.3 et 2.4.

  • Les données d’entrée et de sortie qui utilisent RDD ne s’affichent pas sous l’onglet Data.

Étapes suivantes

Suggestions

Si vous avez des commentaires ou rencontrez des problèmes lors de l’utilisation de cet outil, envoyez un e-mail à (hdivstool@microsoft.com).