在我的spark-shell中,当我执行一个函数时,下面的条目是什么意思?
[Stage7:===========> (14174 + 5) / 62500]
答案 0 :(得分:87)
你得到的是Console Progress Bar
,
[Stage 7:
显示您现在所处的舞台,并且
(14174 + 5) / 62500]
是(numCompletedTasks + numActiveTasks) / totalNumOfTasksInThisStage]
。进度条显示numCompletedTasks
/ totalNumOfTasksInThisStage
。
当 spark.ui.showConsoleProgress
为真时(默认情况下)和 conf/log4j.properties
中的日志级别为ERROR
或WARN
(!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;将在左侧,并在任务完成后向右移动。