Resources/Documentation 关于 yarn-cluster 模式下 Spark 驱动程序(及其 YARN 容器)的故障转移过程如何工作
Resources/Documentation on how does the failover process work for the Spark Driver (and its YARN Container) in yarn-cluster mode
我试图了解在以集群模式部署 Yarn 时 Spark Driver 是否是单点故障。因此,我想在这种情况下更好地了解有关 Spark Driver 的 YARN 容器的故障转移过程的内部结构。
我知道 Spark 驱动程序将 运行 在 Yarn 容器内的 Spark Application Master 中。如果需要,Spark Application Master 将向 YARN Resource Manager 请求资源。但是我还没有找到足够详细的文档来说明在 Spark Application Master(和 Spark 驱动程序)的 YARN 容器发生故障时的故障转移过程。
我正在尝试找出一些详细的资源,这些资源可以让我回答与以下场景相关的一些问题:如果 YARN 容器的主机 运行s Spark Application Master / Spark Driver 失去网络连接 1 小时:
YARN 资源管理器是否使用另一个 Spark 应用程序 Master/Spark 驱动程序生成新的 YARN 容器?
在那种情况下(产生一个新的 YARN 容器),如果 1 个执行器中的至少 1 个阶段已经完成并通知原始驱动程序,它是否从头开始启动 Spark 驱动程序在它失败之前? persist() 中使用的选项在这里有所不同吗?新的 Spark Driver 会知道执行者已经完成了 1 个阶段吗? Tachyon 会在这种情况下提供帮助吗?
如果在原始 Spark Application Master 的 YARN 容器主机中恢复网络连接,是否会触发故障回复过程?我想可以从 YARN 控制这种行为,但我不知道在集群模式下部署 SPARK 时的默认设置是什么。
如果你能指出一些文档/网页,其中详细探讨了 yarn-cluster 模式下的 Spark 架构和故障转移过程,我将不胜感激。
我们刚刚开始 运行 YARN,所以我了解的不多。但我几乎可以肯定我们在驱动程序级别没有自动故障转移。 (我们自己实施了一些。)
我不希望驱动程序有任何默认的故障转移解决方案。您(驱动程序作者)是唯一知道如何对您的应用程序进行健康检查的人。而存在于驱动程序中的状态不是可以自动序列化的东西。当一个 SparkContext 被销毁时,在其中创建的所有 RDD 都将丢失,因为如果没有 运行 应用程序,它们将毫无意义。
你能做什么
我们实施的恢复策略非常简单。在每次昂贵的 Spark 操作之后,我们都会创建一个手动检查点。我们将 RDD 保存到磁盘(认为 saveAsTextFile
)并立即将其加载回来。这会擦除 RDD 的沿袭,因此如果分区丢失,它将被重新加载而不是重新计算。
我们还存储了我们所做的和文件名。因此,如果驱动程序重新启动,它可以在此类操作的粒度上从中断的地方继续。
我试图了解在以集群模式部署 Yarn 时 Spark Driver 是否是单点故障。因此,我想在这种情况下更好地了解有关 Spark Driver 的 YARN 容器的故障转移过程的内部结构。
我知道 Spark 驱动程序将 运行 在 Yarn 容器内的 Spark Application Master 中。如果需要,Spark Application Master 将向 YARN Resource Manager 请求资源。但是我还没有找到足够详细的文档来说明在 Spark Application Master(和 Spark 驱动程序)的 YARN 容器发生故障时的故障转移过程。
我正在尝试找出一些详细的资源,这些资源可以让我回答与以下场景相关的一些问题:如果 YARN 容器的主机 运行s Spark Application Master / Spark Driver 失去网络连接 1 小时:
YARN 资源管理器是否使用另一个 Spark 应用程序 Master/Spark 驱动程序生成新的 YARN 容器?
在那种情况下(产生一个新的 YARN 容器),如果 1 个执行器中的至少 1 个阶段已经完成并通知原始驱动程序,它是否从头开始启动 Spark 驱动程序在它失败之前? persist() 中使用的选项在这里有所不同吗?新的 Spark Driver 会知道执行者已经完成了 1 个阶段吗? Tachyon 会在这种情况下提供帮助吗?
如果在原始 Spark Application Master 的 YARN 容器主机中恢复网络连接,是否会触发故障回复过程?我想可以从 YARN 控制这种行为,但我不知道在集群模式下部署 SPARK 时的默认设置是什么。
如果你能指出一些文档/网页,其中详细探讨了 yarn-cluster 模式下的 Spark 架构和故障转移过程,我将不胜感激。
我们刚刚开始 运行 YARN,所以我了解的不多。但我几乎可以肯定我们在驱动程序级别没有自动故障转移。 (我们自己实施了一些。)
我不希望驱动程序有任何默认的故障转移解决方案。您(驱动程序作者)是唯一知道如何对您的应用程序进行健康检查的人。而存在于驱动程序中的状态不是可以自动序列化的东西。当一个 SparkContext 被销毁时,在其中创建的所有 RDD 都将丢失,因为如果没有 运行 应用程序,它们将毫无意义。
你能做什么
我们实施的恢复策略非常简单。在每次昂贵的 Spark 操作之后,我们都会创建一个手动检查点。我们将 RDD 保存到磁盘(认为 saveAsTextFile
)并立即将其加载回来。这会擦除 RDD 的沿袭,因此如果分区丢失,它将被重新加载而不是重新计算。
我们还存储了我们所做的和文件名。因此,如果驱动程序重新启动,它可以在此类操作的粒度上从中断的地方继续。