应用程序中的阶段是否在spark中并行运行?

时间:2016-12-27 07:08:36

标签: scala apache-spark bigdata

我怀疑,如何在spark应用程序中执行各个阶段。程序员可以定义的阶段执行是否一致,还是由spark引擎派生?

2 个答案:

答案 0 :(得分:5)

检查此图片中的实体(阶段,分区):

enter image description here

pic credits

  

作业中的阶段(spark应用程序?)是否在spark中并行运行?

是的,如果没有顺序依赖,它们可以并行执行。

此处阶段1和阶段2分区可以并行执行,但不能执行阶段0分区,因为阶段1和阶段1中的依赖性分区。必须处理2。

  

执行可以定义的阶段是否有任何一致性   程序员还是它会由火花引擎派生出来?

阶段边界由在分区之间发生数据重排时定义。 (查看图片中的粉色线条)

答案 1 :(得分:3)

  

如何在Spark作业中执行

如果作业的阶段没有依赖关系,则可以并行运行。

在Spark中,阶段被边界分割。你有一个shuffle阶段,这是一个转换被分割的边界阶段,即reduceByKey,你有一个结果阶段,这些阶段必然会产生一个结果而不会导致混乱,即{{{ 1}}操作:

Spark stages

(Picture provided by Cloudera)

由于map是一个随机播放阶段,你会看到粉红色框中的分割,这标志着一个边界。

在内部,阶段进一步分为任务。例如,在上图中,groupByKey的第一行可以分为三个任务,每个任务一个。

当一个转换输出是另一个转换输入时,我们需要串行执行。但是,如果阶段不相关,即textFile -> map -> filter,它们可以并行运行。一旦他们从那个阶段宣布他们之间的依赖关系,他们将继续连续执行。