¿Qué significan los números en la barra de progreso en spark-shell?


92

En mi chispa-shell, ¿qué significan entradas como las siguientes cuando ejecuto una función?

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

4
Cambié el ejemplo para usar números más interesantes y cambiar el título para que la pregunta sea más fácil de encontrar. Esto quita un poco de su pregunta original, porque deja en claro que se trata de una barra de progreso (que en su caso no estaba del todo clara, ya que estaba en 0). Pero creo que es más útil de esta forma en general. Si no está de acuerdo, ¡no dude en deshacer mis cambios! ¡Gracias!
Daniel Darabos

Sonidos muy bien a mí - gracias por eso
rmckeown

2
Buena pregunta. ¡¡Me pregunto por qué no lo pedí durante un año (duración de mi trabajo en Spark) !!
Prashant

Respuestas:


102

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.propertiessea ERRORo WARN( !log.isInfoEnabledsea ​​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
}

8
¡Gran respuesta! Aquí hay un enlace a la solicitud de extracción que introdujo esta función: github.com/apache/spark/pull/3029 . Esa página tiene algunas discusiones de diseño interesantes RE: el comportamiento de esta barra de progreso, especialmente para trabajos de varias etapas.
Josh Rosen

30

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.