有关故障转移过程如何在纱线群集模式下为Spark驱动程序(及其YARN容器)工作的资源/文档

Mig*_*lvo 6 hadoop hadoop-yarn apache-spark alluxio

我正在尝试了解在为群集模式部署Yarn时,Spark Driver是否是单点故障.因此,我希望在此上下文中更好地了解有关Spark驱动程序的YARN容器的故障转移过程的内部结构.

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

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

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

  2. 在那种情况下(产生一个新的YARN容器),如果至少1个执行程序中的1个阶段已经完成并且在失败之前通知原始驱动程序,它是否从头开始启动Spark驱动程序?persist()中使用的选项是否会产生影响?新的Spark Driver会不会知道执行者已经完成了1个阶段?Tachyon会在这种情况下帮忙吗?

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

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

Dan*_*bos 5

我们刚开始在YARN上运行,所以我不太了解.但我几乎可以肯定,我们在驾驶员级别没有自动故障转移.(我们自己实施了一些.)

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

你可以做什么

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

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