私のスパークシェルでは、関数を実行すると、以下のようなエントリは何を意味しますか?
[Stage7:===========> (14174 + 5) / 62500]
私のスパークシェルでは、関数を実行すると、以下のようなエントリは何を意味しますか?
[Stage7:===========> (14174 + 5) / 62500]
回答:
あなたが得るものはでありConsole Progress Bar
、
[Stage 7:
あなたが今いる段階を示し、そして
(14174 + 5) / 62500]
です(numCompletedTasks + numActiveTasks) / totalNumOfTasksInThisStage]
。進行状況バーにnumCompletedTasks
/が表示されtotalNumOfTasksInThisStage
ます。
両方 spark.ui.showConsoleProgress
がtrue(デフォルト)であり、ログインレベルがconf/log4j.properties
is ERROR
またはWARN
(!log.isInfoEnabled
is true)の場合に表示されます。
それを示す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
}
次のようになっているとします(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は常に一定のままです。これは、ステージ内のタスクの総数であり、決して変化しないことを覚えておいてください。
====>は、上記で説明した内容に基づいて行われた作業の割合を示しています。最初は>が左側にあり、タスクが完了すると右側に移動します。