Spark中的舞台细节

时间:2017-09-19 10:16:04

标签: scala hadoop apache-spark spark-dataframe rdd

我正在尝试使用DataFrameHDFS保存为spark-shell中的文本文件。

scala> finalDataFrame.rdd.saveAsTextFile(targetFile)

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

  

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

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

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

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

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

1 个答案:

答案 0 :(得分:6)

  

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

     
      
  1. 第13阶段是什么?
  2.   

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

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

检查source code可以帮助解答这个问题:

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

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

  

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

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

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

/** ...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
}

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