Ce que je veux, c'est pouvoir surveiller la mémoire d'exécution de Spark par opposition à mémoire de stockage disponible dans SparkUI. Je veux dire, exécution mémoire PAS la mémoire de l'exécuteur .
Par mémoire d'exécution, je veux dire:
Cette région est utilisée pour la mise en mémoire tampon des données intermédiaires lors de l'exécution de shuffles, jointures, tris et agrégations. La taille de cette région est configurée via spark.shuffle.memoryFraction (default0.2). Selon: nified Memory Management in Spark 1.6
Après une intense recherche de réponses, je n'ai trouvé que des questions StackOverflow sans réponse, des réponses qui ne concernent que la mémoire de stockage ou des réponses vagues du type utilisez Ganglia, utilisez la console Cloudera etc ...
Il semble y avoir une demande pour ces informations sur Stack Overflow, et pourtant aucune réponse satisfaisante n'est disponible. Voici quelques articles de premier plan de StackOverflow lors de la recherche monitoring spark memory
Surveiller Spark exécution et utilisation de la mémoire de stockage
Surveillance de l'utilisation de la mémoire de Spark Jobs
SPARK: Comment surveiller la consommation de mémoire sur Spark cluster?
Spark - surveille la mémoire réelle de l'exécuteur utilisé
Comment puis-je surveiller l'utilisation de la mémoire et du processeur par spark?
Comment obtenir la mémoire et l'utilisation du processeur par une Spark?
Questions
Version Spark> 2.0
Est-il possible de surveiller la mémoire d'exécution de Spark job? Par surveillance, je veux dire au minimum voir utilisé/disponible comme pour la mémoire de stockage par exécuteur dans l'onglet Exécuteur de SparkUI. Oui ou Non?
Puis-je le faire avec SparkListeners (@JacekLaskowski?) Que diriez-vous du serveur historique? Ou la seule façon est d'utiliser les outils externes? Graphana, Ganglia, autres? S'il s'agit d'outils externes, pourriez-vous indiquer un didacticiel ou fournir des directives plus détaillées?
J'ai vu ceci SPARK-9103 Tracking spark's memory usage semble qu'il n'est pas encore possible de surveiller la mémoire d'exécution. Cela semble également pertinent SPARK-23206 métriques supplémentaires de réglage de la mémoire .
Est-ce que Peak Execution memory
est une estimation fiable de l'utilisation/occupation de la mémoire d'exécution dans une tâche? Si, par exemple, une interface utilisateur Stage indique qu'une tâche utilise 1 Go au maximum et que j'ai 5 processeurs par exécuteur, cela signifie-t-il que j'ai besoin d'au moins 5 Go de mémoire d'exécution disponible sur chaque exécuteur pour terminer une étape?
Existe-t-il d'autres proxys que nous pourrions utiliser pour avoir un aperçu de la mémoire d'exécution?
Existe-t-il un moyen de savoir quand la mémoire d'exécution commence à manger dans la mémoire de stockage? Lorsque ma table en cache disparaît de l'onglet Stockage dans SparkUI ou qu'il n'en reste qu'une partie, cela signifie-t-il qu'elle a été supprimée par la mémoire d'exécution?
Répondre à ma propre question pour référence future:
Nous utilisons Mesos comme gestionnaire de cluster. Dans l'interface utilisateur Mesos, j'ai trouvé une page qui répertorie tous les exécuteurs sur un travailleur donné et là, on peut trouver une utilisation de la mémoire de l'exécuteur. Il semble s'agir d'un stockage + exécution total de l'utilisation de la mémoire. Je peux clairement voir que lorsque la mémoire se remplit, l'exécuteur testament meurt.
Accéder:
La même chose peut être faite pour le conducteur. Pour un cadre, vous choisissez celui avec un nom Spark Cluster
Si vous voulez savoir comment extraire ce numéro par programme, consultez ma réponse à cette question: Comment obtenir la mémoire de l'exécuteur du framework Mesos Agents