进度条上的数字在spark-shell中是什么意思?


92

在我的火花壳中,执行函数时,如下所示的条目意味着什么?

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

4
我已更改示例以使用更多有趣的数字,并更改标题以使问题更易于查找。这与您原来的问题有些脱节,因为可以清楚地看出这是一个进度条(在您的情况下,由于它一直为0,所以根本不清楚)。但是我认为这样总体上更有用。如果您不同意,请随时撤消我的更改!谢谢!
丹尼尔·达拉博斯

对我来说听起来不错-谢谢您
rmckeown 2016年

2
很酷的问题。想知道为什么我一年都没问过(我在Spark上的工作时间)!
Prashant

Answers:


102

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

两者 spark.ui.showConsoleProgress均为true(默认情况)并且登录级别为conf/log4j.propertiesis ERRORWARN!log.isInfoEnabledtrue)时,将显示该信息。

让我们看一下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
}

8
好答案!这是引入了此功能的pull请求的链接:github.com/apache/spark/pull/3029。该页面上有一些有趣的设计讨论,RE:此进度条的行为,特别是对于多阶段作业。
Josh Rosen

30

假设您看到以下内容(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,该阶段完成,火花移动到下一个阶段。C将在整个时间内保持不变,请记住这是阶段中任务的总数,并且永远不会改变。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.