2015-05-14 5 views
45

In meiner Spark-Shell, was bedeuten die folgenden Einträge, wenn ich eine Funktion ausführe?Was bedeuten die Zahlen auf dem Fortschrittsbalken in Spark-Shell?

[Stage7:===========>        (14174 + 5)/62500] 
+2

Ich habe das Beispiel geändert, um interessantere Zahlen zu verwenden und den Titel zu ändern, damit die Frage leichter zu finden ist. Das nimmt etwas von deiner ursprünglichen Frage weg, denn das macht deutlich, dass dies ein Fortschrittsbalken ist (was in deinem Fall gar nicht klar war, da er bei 0 stand). Aber ich denke, dass es auf diese Weise insgesamt nützlicher ist. Wenn Sie nicht zustimmen, können Sie meine Änderungen rückgängig machen! Vielen Dank! –

+0

Klingt gut für mich - vielen Dank dafür – rmckeown

Antwort

65

Was man bekommt, ist ein Console Progress Bar, [Stage 7: zeigt die Bühne Sie jetzt sind, und (14174 + 5)/62500] ist (numCompletedTasks + numActiveTasks)/totalNumOfTasksInThisStage]. Der Fortschrittsbalken zeigt numCompletedTasks/totalNumOfTasksInThisStage.

Es wird angezeigt, wenn beidespark.ui.showConsoleProgress wahr ist (Standardeinstellung) und Protokollebene in conf/log4j.properties ist ERROR oder WARN (!log.isInfoEnabled wahr ist).

Lassen Sie uns den Code in ConsoleProgressBar.scala sehen, dass es zeigt aus:

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 
} 
+3

Große Antwort! Hier ist ein Link zu der Pull-Anfrage, die diese Funktion eingeführt hat: https://github.com/apache/spark/pull/3029. Diese Seite hat einige interessante Design-Diskussionen. RE: das Verhalten dieses Fortschrittsbalkens, besonders für mehrstufige Jobs. –

7

Nehmen wir an, Sie sehen die folgende (X, A, B, C sind immer nicht negativen ganzen Zahlen):

[Stage X:==========>   (A + B)/C] 

(zB in der Frage X = 7, A = 14174, B = 5 und C = 62500)

Hier geht es auf hohem Niveau: Spark bricht die Arbeit in Etappen und Aufgaben in jeder Phase. 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 abgeschlossenen Aufgaben und B ist die Anzahl der aktuell ausgeführten Aufgaben. Für eine Phase mit vielen Aufgaben (viel mehr als die Arbeiter, die Sie haben) sollten Sie erwarten, dass B zu einer Zahl wächst, die der Anzahl der Arbeiter im Cluster entspricht. Dann sollten Sie eine Steigerung sehen, wenn Aufgaben abgeschlossen sind. Gegen Ende, wenn die letzten Aufgaben ausgeführt werden, beginnt B zu sinken, 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 ganzen Zeit konstant. Denken Sie daran, dass es sich um die Gesamtanzahl der Aufgaben auf der Bühne handelt, die sich nie ändern.

Die ====> zeigt den Prozentsatz der Arbeit basierend auf was ich oben beschrieben. Zu Beginn wird das> nach links sein und sich nach Abschluss der Aufgaben nach rechts bewegen.

Verwandte Themen