Dans mon spark-shell, que signifient les entrées comme celles ci-dessous lorsque j'exécute une fonction?
[Stage7:===========> (14174 + 5) / 62500]
Dans mon spark-shell, que signifient les entrées comme celles ci-dessous lorsque j'exécute une fonction?
[Stage7:===========> (14174 + 5) / 62500]
Réponses:
Ce que vous obtenez est un Console Progress Bar
,
[Stage 7:
montre la scène dans laquelle vous êtes maintenant, et
(14174 + 5) / 62500]
est (numCompletedTasks + numActiveTasks) / totalNumOfTasksInThisStage]
. La barre de progression affiche numCompletedTasks
/ totalNumOfTasksInThisStage
.
Il sera affiché lorsque les deux spark.ui.showConsoleProgress
sont true (par défaut) et que le niveau de journalisation conf/log4j.properties
est ERROR
ou WARN
( !log.isInfoEnabled
est vrai).
Voyons le code dans ConsoleProgressBar.scala qui le montre:
private def show(now: Long, stages: Seq[SparkStageInfo]) {
val width = TerminalWidth / stages.size
val bar = stages.map { s =>
val total = s.numTasks()
val header = s"[Stage ${s.stageId()}:"
val tailer = s"(${s.numCompletedTasks()} + ${s.numActiveTasks()}) / $total]"
val w = width - header.length - tailer.length
val bar = if (w > 0) {
val percent = w * s.numCompletedTasks() / total
(0 until w).map { i =>
if (i < percent) "=" else if (i == percent) ">" else " "
}.mkString("")
} else {
""
}
header + bar + tailer
}.mkString("")
// only refresh if it's changed of after 1 minute (or the ssh connection will be closed
// after idle some time)
if (bar != lastProgressBar || now - lastUpdateTime > 60 * 1000L) {
System.err.print(CR + bar)
lastUpdateTime = now
}
lastProgressBar = bar
}
Supposons que vous voyez ce qui suit (X, A, B, C sont toujours des entiers non négatifs):
[Stage X:==========> (A + B) / C]
(par exemple dans la question X = 7, A = 14174, B = 5 et C = 62500)
Voici ce qui se passe à un niveau élevé: Spark divise le travail en étapes et les tâches à chaque étape. Cet indicateur de progression signifie que l'étape X comprend des tâches C. Pendant l'exécution, A et B commencent à zéro et continuent de changer. A est toujours le nombre de tâches déjà terminées et B est le nombre de tâches en cours d'exécution. Pour une étape avec de nombreuses tâches (bien plus que les travailleurs que vous avez), vous devriez vous attendre à voir B passer à un nombre qui correspond au nombre de travailleurs que vous avez dans le cluster, alors vous devriez commencer à voir A augmenter à mesure que les tâches sont terminées. Vers la fin, au fur et à mesure que les dernières tâches s'exécutent, B commencera à diminuer jusqu'à ce qu'il atteigne 0, point auquel A devrait égaler C, l'étape est terminée et l'étincelle passe à l'étape suivante. C restera constant pendant tout le temps, rappelez-vous qu'il s'agit du nombre total de tâches dans l'étape et qu'il ne change jamais.
Le ====> montre le pourcentage de travail effectué en fonction de ce que j'ai décrit ci-dessus. Au début, le> sera vers la gauche et se déplacera vers la droite à mesure que les tâches sont terminées.