Nella mia shell spark, cosa significano voci come quelle sotto quando eseguo una funzione?
[Stage7:===========> (14174 + 5) / 62500]
Nella mia shell spark, cosa significano voci come quelle sotto quando eseguo una funzione?
[Stage7:===========> (14174 + 5) / 62500]
Risposte:
Quello che ottieni è un Console Progress Bar
,
[Stage 7:
mostra lo stadio in cui ti trovi ora, ed
(14174 + 5) / 62500]
è (numCompletedTasks + numActiveTasks) / totalNumOfTasksInThisStage]
. La barra di avanzamento mostra numCompletedTasks
/ totalNumOfTasksInThisStage
.
Verrà mostrato quando entrambi spark.ui.showConsoleProgress
sono veri (per impostazione predefinita) e il livello di accesso conf/log4j.properties
è ERROR
o WARN
( !log.isInfoEnabled
è vero).
Vediamo il codice in ConsoleProgressBar.scala che lo mostra:
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
}
Supponiamo di vedere quanto segue (X, A, B, C sono sempre numeri interi non negativi):
[Stage X:==========> (A + B) / C]
(ad esempio nella domanda X = 7, A = 14174, B = 5 e C = 62500)
Ecco cosa sta succedendo ad alto livello: Spark interrompe il lavoro in fasi e le attività in ciascuna fase. Questo indicatore di avanzamento indica che la fase X comprende attività C. Durante l'esecuzione, A e B iniziano da zero e continuano a cambiare. A è sempre il numero di attività già terminate e B è il numero di attività attualmente in esecuzione. Per una fase con molte attività (molto più dei lavoratori che hai) dovresti aspettarti di vedere B crescere fino a un numero che corrisponde a quanti lavoratori hai nel cluster, quindi dovresti iniziare a vedere A aumentare man mano che le attività vengono completate. Verso la fine, mentre vengono eseguite le ultime poche attività, B inizierà a diminuire fino a raggiungere 0, a quel punto A dovrebbe essere uguale a C, lo stadio è finito e la scintilla si sposta allo stadio successivo. C rimarrà costante per tutto il tempo, ricorda che è il numero totale di attività nello stage e non cambia mai.
====> mostra la percentuale di lavoro svolto in base a quanto descritto sopra. All'inizio il> sarà verso sinistra e si sposterà a destra quando le attività saranno completate.