7

我试图了解在以集群模式部署 Yarn 时 Spark 驱动程序是否是单点故障。因此,我想在此上下文中更好地了解有关 Spark 驱动程序的 YARN 容器的故障转移过程的内部情况。

我知道 Spark Driver 将在 Yarn Container 内的 Spark Application Master 中运行。如果需要,Spark Application Master 将向 YARN 资源管理器请求资源。但是,在 Spark Application Master(和 Spark 驱动程序)的 YARN 容器失败的情况下,我无法找到有关故障转移过程的足够详细信息的文档。

我试图找出一些详细的资源,可以让我回答与以下场景相关的一些问题:如果运行 Spark Application Master / Spark Driver 的 YARN 容器的主机在 1 小时内失去网络连接:

  1. YARN 资源管理器是否使用另一个 Spark Application Master/Spark Driver 生成一个新的 YARN 容器?

  2. 在那种情况下(产生一个新的 YARN 容器),如果 Executors 中的至少 1 个阶段已经完成并在失败之​​前通知原始驱动程序,它是否会从头开始启动 Spark 驱动程序?persist() 中使用的选项在这里有什么不同吗?新的 Spark Driver 是否会知道 executor 已经完成了 1 个阶段?Tachyon 会在这种情况下提供帮助吗?

  3. 如果在原始 Spark Application Master 的 YARN 容器的主机中恢复网络连接,是否会触发故障回复过程?我猜这种行为可以通过 YARN 来控制,但是我不知道在集群模式下部署 SPARK 时的默认设置是什么。

如果您能指出一些文档/网页,我将非常感激,其中详细探讨了纱线集群模式下的 Spark 架构和故障转移过程。

4

1 回答 1

5

我们刚开始在 YARN 上运行,所以我不太了解。但我几乎可以肯定我们在驱动程序级别没有自动故障转移。(我们自己实现了一些。)

我不希望驱动程序有任何默认的故障转移解决方案。您(驱动程序作者)是唯一知道如何对您的应用程序进行健康检查的人。并且驱动程序中的状态不是可以自动序列化的。当一个 SparkContext 被销毁时,在其中创建的所有 RDD 都会丢失,因为没有运行的应用程序它们就毫无意义。

你可以做什么

我们实施的恢复策略非常简单。在每次昂贵的 Spark 操作之后,我们都会创建一个手动检查点。我们将 RDD 保存到磁盘(想想saveAsTextFile)并立即将其加载回来。这会擦除 RDD 的沿袭,因此如果分区丢失,它将重新加载而不是重新计算。

我们还存储我们所做的和文件名。因此,如果驱动程序重新启动,它可以以此类操作的粒度从中断处继续。

于 2015-01-19T19:20:06.680 回答