進行状況バーの数字はスパークシェルで何を意味しますか?


92

私のスパークシェルでは、関数を実行すると、以下のようなエントリは何を意味しますか?

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

4
より興味深い数字を使用するように例を変更し、質問を見つけやすくするためにタイトルを変更しました。これは、これが進行状況バーであることを明確にするため、元の質問から少し離れています(0に立っているため、この場合はまったく明確ではありませんでした)。しかし、私はそれが全体的にこの方法でより便利だと思います。同意しない場合は、変更を元に戻してください。ありがとう!
ダニエルダラボス2016

私にはいいですね-おかげで
rmckeown

2
クールな質問。なぜ私がそれを1年間尋ねなかったのか疑問に思います(Sparkでの私の仕事の期間)!!
Prashant

回答:


102

あなたが得るものはでありConsole Progress Bar[Stage 7:あなたが今いる段階を示し、そして (14174 + 5) / 62500]です(numCompletedTasks + numActiveTasks) / totalNumOfTasksInThisStage]。進行状況バーにnumCompletedTasks/が表示されtotalNumOfTasksInThisStageます。

両方 spark.ui.showConsoleProgressがtrue(デフォルト)であり、ログインレベルがconf/log4j.propertiesis ERRORまたはWARN!log.isInfoEnabledis 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
}

8
正解です。この機能を導入したプルリクエストへのリンクは次のとおりです: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は常に一定のままです。これは、ステージ内のタスクの総数であり、決して変化しないことを覚えておいてください。

====>は、上記で説明した内容に基づいて行われた作業の割合を示しています。最初は>が左側にあり、タスクが完了すると右側に移動します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.