En mi chispa-shell, ¿qué significan entradas como las siguientes cuando ejecuto una función?
[Stage7:===========> (14174 + 5) / 62500]
En mi chispa-shell, ¿qué significan entradas como las siguientes cuando ejecuto una función?
[Stage7:===========> (14174 + 5) / 62500]
Respuestas:
Lo que obtienes es un Console Progress Bar
,
[Stage 7:
muestra la etapa en la que te encuentras ahora y
(14174 + 5) / 62500]
es (numCompletedTasks + numActiveTasks) / totalNumOfTasksInThisStage]
. La barra de progreso muestra numCompletedTasks
/ totalNumOfTasksInThisStage
.
Se mostrará cuando ambos spark.ui.showConsoleProgress
sean verdaderos (por defecto) y el nivel de inicio de sesión conf/log4j.properties
sea ERROR
o WARN
( !log.isInfoEnabled
sea verdadero).
Veamos el código en ConsoleProgressBar.scala que lo muestra:
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
}
Supongamos que ve lo siguiente (X, A, B, C siempre son números enteros no negativos):
[Stage X:==========> (A + B) / C]
(por ejemplo en la pregunta X = 7, A = 14174, B = 5 y C = 62500)
Esto es lo que está sucediendo a un alto nivel: Spark divide el trabajo en etapas y tareas en cada etapa. Este indicador de progreso significa que la Etapa X se compone de tareas C. Durante la ejecución, A y B comienzan en cero y siguen cambiando. A es siempre el número de tareas ya finalizadas y B es el número de tareas en ejecución. Para una etapa con muchas tareas (mucho más que los trabajadores que tiene), debería esperar ver que B crezca a un número que corresponda a la cantidad de trabajadores que tiene en el clúster, luego debería comenzar a ver un aumento de A a medida que se completan las tareas. Hacia el final, a medida que se ejecutan las últimas tareas, B comenzará a disminuir hasta llegar a 0, en cuyo punto A debería ser igual a C, la etapa está lista y la chispa pasa a la siguiente etapa. C se mantendrá constante durante todo el tiempo, recuerda que es el número total de tareas en la etapa y nunca cambia.
====> muestra el porcentaje de trabajo realizado según lo que describí anteriormente. Al principio, el> estará hacia la izquierda y se moverá hacia la derecha a medida que se completen las tareas.