St.*_*rio 6 java scala apache-spark
问题是我有以下DAG:
我认为,在需要改组时,spark会在不同阶段分配工作。考虑阶段0和阶段1。有些操作不需要改组。那么,为什么Spark将它们分成不同的阶段?
我认为跨分区实际的数据移动应该已经在阶段2进行了。因为在这里我们需要这样做cogroup。但是要进行分组,我们需要来自stage 0和的数据stage 1。
因此,Spark保留了这些阶段的中间结果,然后将其应用到Stage 2?
您应该将一个“阶段”视为可以在RDD的每个分区上执行的一系列转换,而不必访问其他分区中的数据。
换句话说,如果我可以创建一个包含单个分区并生成一个新(单个)分区的操作T,并将相同的T应用于每个RDD的分区,则T可以由一个“阶段”执行。
现在,stage 0和stage 1操作上的两个独立的RDDS并执行不同的转换,因此它们不能共享同台演出。请注意,这两个阶段都不对另一个阶段的输出进行操作-因此它们不是创建单个阶段的“候选人”。
注意,这并不意味着它们不能并行运行:Spark可以安排两个阶段同时运行;在这种情况下,stage 2(执行cogroup)将同时等待stage 0并stage 1完成,产生新的分区,将它们洗牌给合适的执行者,然后对这些新分区进行操作。
| 归档时间: |
|
| 查看次数: |
1132 次 |
| 最近记录: |