进度条上的数字在火花壳中意味着什么?

时间:2015-05-14 18:56:55

标签: apache-spark

在我的spark-shell中,当我执行一个函数时,下面的条目是什么意思?

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

2 个答案:

答案 0 :(得分:87)

你得到的是Console Progress Bar[Stage 7:显示您现在所处的舞台,并且 (14174 + 5) / 62500](numCompletedTasks + numActiveTasks) / totalNumOfTasksInThisStage]。进度条显示numCompletedTasks / totalNumOfTasksInThisStage

spark.ui.showConsoleProgress为真时(默认情况下) conf/log4j.properties中的日志级别为ERRORWARN!log.isInfoEnabled为真)。

让我们看一下ConsoleProgressBar.scala中显示的代码:

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
}

答案 1 :(得分:23)

让我们假设你看到以下内容(X,A,B,C总是非负整数):

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

(例如在问题X = 7,A = 14174,B = 5和C = 62500)

以下是高层次的进展:Spark在每个阶段分阶段完成工作。此进度指示器表示阶段X由C任务组成。在执行期间,A和B从零开始并不断变化。 A始终是已完成的任务数,B是当前正在执行的任务数。对于具有许多任务的阶段(比您拥有的工作人员多的方式),您应该看到B增长到与群集中的工作人员数量相对应的数字,然后您应该在任务完成时开始看到A增加。接近最后,当最后几个任务执行时,B将开始减小直到达到0,此时A应该等于C,阶段完成,并且spark移动到下一阶段。 C将在整个时间内保持不变,记住它是阶段中任务的总数,永远不会改变。

====&gt;显示基于我上面描述的工作的百分比。在开始时&gt;将在左侧,并在任务完成后向右移动。