Was bedeuten Einträge wie die folgenden in meiner Spark-Shell, wenn ich eine Funktion ausführe?
[Stage7:===========> (14174 + 5) / 62500]
Was bedeuten Einträge wie die folgenden in meiner Spark-Shell, wenn ich eine Funktion ausführe?
[Stage7:===========> (14174 + 5) / 62500]
Antworten:
Was Sie bekommen, ist a Console Progress Bar
,
[Stage 7:
zeigt die Bühne, in der Sie sich gerade befinden, und
(14174 + 5) / 62500]
ist (numCompletedTasks + numActiveTasks) / totalNumOfTasksInThisStage]
. Der Fortschrittsbalken zeigt numCompletedTasks
/ totalNumOfTasksInThisStage
.
Es wird angezeigt, wenn beide spark.ui.showConsoleProgress
wahr ist (Standardeinstellung) und -Protokollstufe in conf/log4j.properties
ist ERROR
oder WARN
( !log.isInfoEnabled
wahr ist ).
Sehen wir uns den Code in ConsoleProgressBar.scala an , der ihn zeigt:
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
}
Nehmen wir an, Sie sehen Folgendes (X, A, B, C sind immer nicht negative ganze Zahlen):
[Stage X:==========> (A + B) / C]
(zum Beispiel in der Frage X = 7, A = 14174, B = 5 und C = 62500)
Hier ist, was auf hohem Niveau vor sich geht: Spark unterbricht die Arbeit in Stufen und Aufgaben in jeder Stufe. Diese Fortschrittsanzeige bedeutet, dass Stufe X aus C-Aufgaben besteht. Während der Ausführung beginnen A und B bei Null und ändern sich ständig. A ist immer die Anzahl der bereits erledigten Aufgaben und B die Anzahl der aktuell ausgeführten Aufgaben. In einer Phase mit vielen Aufgaben (weit mehr als die Mitarbeiter, die Sie haben) sollten Sie erwarten, dass B auf eine Zahl anwächst, die der Anzahl der Mitarbeiter im Cluster entspricht. Dann sollte A nach Abschluss der Aufgaben zunehmen. Gegen Ende, wenn die letzten Aufgaben ausgeführt werden, nimmt B ab, bis es 0 erreicht. An diesem Punkt sollte A gleich C sein, die Stufe ist beendet und der Funke bewegt sich zur nächsten Stufe. C bleibt während der gesamten Zeit konstant. Denken Sie daran, dass dies die Gesamtzahl der Aufgaben in der Phase ist und sich nie ändert.
Das ====> zeigt den Prozentsatz der geleisteten Arbeit basierend auf dem, was ich oben beschrieben habe. Zu Beginn befindet sich das> nach links und bewegt sich nach Abschluss der Aufgaben nach rechts.