Spark中的舞台细节

Avi*_*jit 3 hadoop scala apache-spark rdd spark-dataframe

我想DataFrameHDFS使用中保存为文本文件spark-shell.

scala> finalDataFrame.rdd.saveAsTextFile(targetFile)
Run Code Online (Sandbox Code Playgroud)

执行上面的代码后,我发现内部使用阶段做了一些工作.

[第13阶段:================================>(119 + 8)/ 200]

我试图了解这个过程的基本细节.但是不能这样做.我的问题是 -

  1. 什么是第13阶段
  2. 什么是(119 + 8)/ 200

[第18阶段:=============>(199 + 1)/ 200] [第27阶段:============>(173 + 3)/ 200 ]

  1. 这条线的含义是什么?
  2. 以前只有1个阶段正在运行,但在这里我可以找到2个阶段正在运行.因此,当多个阶段并行工作时?

Jef*_*ung 6

[第13阶段:================================>(119 + 8)/ 200]

  1. 什么是第13阶段?

每个Spark工作分为几个阶段.在这种情况下的工作是将DataFrame保存为文本文件,"阶段13"是该作业的多个阶段之一.

  1. 什么是(119 + 8)/ 200?

检查源代码可以帮助解答这个问题:

val bar = stages.map { s =>
  val total = s.numTasks()
  val header = s"[Stage ${s.stageId()}:"
  val tailer = s"(${s.numCompletedTasks()} + ${s.numActiveTasks()}) / $total]"
  ...
}.mkString("")
Run Code Online (Sandbox Code Playgroud)

每个阶段分为任务.119是此阶段(即阶段13)的已完成任务8的数量,是此阶段的活动任务数,并且200是此阶段的任务总数.

[第18阶段:=============>(199 + 1)/ 200] [第27阶段:============>(173 + 3)/ 200 ]

  1. 这条线的含义是什么?
  2. 以前只有1个阶段正在运行,但在这里我可以找到2个阶段正在运行.因此,当多个阶段并行工作时?

再次,查看源代码(此处此处)非常有用:

/** ...If multiple stages run in the same time, the status
 *  of them will be combined together, showed in one line.
 */

...

if (stages.length > 0) {
  show(now, stages.take(3))  // display at most 3 stages in same time
}
Run Code Online (Sandbox Code Playgroud)

这些阶段同时运行,因此在刷新进度条的时间窗口内,可以运行多个阶段.在这种情况下,阶段18和27同时运行.代码将显示限制为三个同时运行的任务.

  • 感谢您的解释.你能不能让我知道Spark内部如何将一份工作分成多个阶段并分成多个任务.Spark如何决定阶段和任务. (3认同)