了解 Spark 中的 DAG

2024-05-18

问题是我有以下 DAG:

我认为当需要洗牌时,火花将工作划分为不同的阶段。考虑阶段 0 和阶段 1。有些操作不需要洗牌。那么为什么 Spark 将它们分成不同的阶段呢?

我认为跨分区的实际数据移动应该发生在第 2 阶段。因为这里我们需要cogroup。但为了共同分组,我们需要来自stage 0 and stage 1.

因此Spark保留了这些阶段的中间结果,然后将其应用到Stage 2?


您应该将单个“阶段”视为一系列转变可以在每个 RDD 上执行分区无需访问其他分区中的数据;

换句话说,如果我可以创建一个操作 T,它接受单个分区并生成一个新的(单个)分区,并将相同的 T 应用于 RDD 的每个分区 - T 可以由单个“阶段”执行。

Now, stage 0 and stage 1操作两个独立的 RDD并执行不同的转变,所以他们不能共享同一个舞台。请注意,这些阶段都不对另一个阶段的输出进行操作 - 因此它们不是创建单个阶段的“候选者”。

NOTE这并不意味着他们不能逃跑在平行下:Spark可以安排两个阶段同时运行;在这种情况下,stage 2(它执行cogroup)会等待两者stage 0 and stage 1完成后,生成新的分区,将它们洗牌到正确的执行器,然后对这些新分区进行操作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

了解 Spark 中的 DAG 的相关文章

随机推荐