DAG 如何让 Apache Spark 容错?

Posted

技术标签:

【中文标题】DAG 如何让 Apache Spark 容错?【英文标题】:How does DAG make Apache Spark fault-tolerant? 【发布时间】:2021-02-22 08:14:12 【问题描述】:

我是 Apache Spark 的初学者。我试图理解 Apache Spark 创建的 DAG 的概念,以及当我们一个接一个地应用转换并在执行操作后执行。

我可以确定的是,如果工作失败,DAG 会来救援。由于所有中间 RDD 都存储在内存中,Spark 知道作业成功运行到哪一步,并仅从该点重新启动作业,而不是从头开始。

现在我有几个问题:

    DAG 能否让 Spark 适应节点故障? 是驱动节点维护 DAG 吗? 一次执行可以有多个 DAG 吗?

【问题讨论】:

【参考方案1】: 我可以看出,如果工作失败,DAG 会来救援。由于所有中间 RDD 都存储在内存中,Spark 知道作业成功运行到哪一步并仅从该点重新启动作业,而不是从头开始。

根据你的理解,我认为你上面所说的并不完全正确。

    DAG 会在发生节点故障而不是作业故障时进行救援。 Spark 驱动程序通过集群管理器知道哪个工作节点正在处理哪个数据分区。因此,当集群管理器知道特定节点已死时,它会分配另一个节点开始处理。由于 DAG ,新的工作节点知道它必须处理的任务,但它必须从一开始就执行所有转换。如果节点发生故障,您在内存中的所有内容也会消失。 DAG 有助于 spark 容错,因为它可以从节点故障中恢复。

您的问题 1: DAG 能否让 Spark 适应节点故障?

Yes DAG makes it fault tolerance to node failures.

问题 2: 是驱动节点维护 DAG 吗?

Yes. When an action is called, the created DAG is submitted to DAG Scheduler, where it gets converted into stages of jobs.

问题 3: 一次执行可以有多个 DAG 吗?

No. you cannot have multiple DAGs because DAG is kind of a graph that represents the operation that you perform.

【讨论】:

并不总是从头开始——它会回头看它需要从哪里开始。这有点复杂。 对于一个特定的工作节点,如果一个工作节点出现故障或死机,它必须根据我的理解从头开始执行该特定工作。很高兴知道它是否不是从该工作的开始开始的,它是如何知道从哪里开始的。 很难解释,数据局部性,可能还有另一个节点上的随机数据仍然可用,但你有它的要点 无法理解,但会尝试阅读文档并确保您要说的内容对我有意义。 @NikunjKakadiya- 有一点我仍然很困惑,也就是说,如果在节点故障的情况下,整个计算必须从头开始,那么 DAG 如何通过 MapReduce 优化 Spark。我的第三个问题是,Spark 驱动节点是为多个 DAG 选择一个优化的 DAG 还是构建一个优化的 DAG?

以上是关于DAG 如何让 Apache Spark 容错?的主要内容,如果未能解决你的问题,请参考以下文章

Apache Spark探秘:三种分布式部署方式比较

在 Apache Spark 中创建 DAG

Apache Spark:Dag 没有为 reduceByKey 执行两次

Apache Manged Airflow EMR 操作员 DAG 失败

如何选择Apache Spark和Apache Flink?

Spark创建HiveContext报错tez的问题