【问题标题】:Understanding DAG in spark了解 Spark 中的 DAG
【发布时间】:2018-02-09 21:06:34
【问题描述】:

问题是我有以下 DAG:

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

我认为跨分区的实际数据移动应该发生在第 2 阶段。因为这里我们需要cogroup。但是要进行联合分组,我们需要来自stage 0stage 1 的数据。

所以Spark保留这些阶段的中间结果,然后应用到Stage 2上?

【问题讨论】:

    标签: java scala apache-spark


    【解决方案1】:

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

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

    现在,stage 0stage 1两个独立的 RDD 上运行并执行不同的转换,因此它们不能共享同一个阶段。请注意,这两个阶段都不对另一个阶段的输出进行操作 - 因此它们不是创建单个阶段的“候选者”。

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-22
    • 1970-01-01
    相关资源
    最近更新 更多