如何使Spark驱动程序对Master重启有弹性?

时间:2016-10-13 15:38:27

标签: apache-spark apache-spark-standalone

我有一个Spark Standalone(不是YARN / Mesos)群集和一个运行(在客户端模式下)的驱动程序应用程序,它与该群集通信以执行其任务。但是,如果我关闭并重新启动Spark主服务器和工作服务器,则驱动程序不会重新连接到主服务器并继续其工作。

也许我对Spark Master和驱动程序之间的关系感到困惑。在这种情况下,主人是否负责重新连接到驱动程序?如果是这样,主服务器是否将其当前状态序列化到某个可以在重新启动时恢复的磁盘?

1 个答案:

答案 0 :(得分:4)

  

在这种情况下,主人负责重新连接   回到司机?如果是这样,Master会序列化其当前状态   磁盘可以在重启时恢复的地方吗?

主节点和驱动程序之间的关系取决于几个因素。首先,驱动程序是托管SparkContext / StreamingContext的驱动程序,负责执行作业。它是创建DAG的那个,并且包含分别分配阶段/任务的DAGSchedulerTaskScheduler。如果您使用Spark Standalone并在“客户端模式”下运行您的作业,主节点可以充当驱动程序的主机。这样,Master也会托管驱动程序进程,如果它死了,驱动程序会像它一样死掉。如果使用“群集模式”,则驱动程序驻留在其中一个Worker节点上,并经常与Master通信以获取当前正在运行的作业的状态,发回有关已完成批次的状态的元数据等。

在Standalone上运行,如果Master死机并重新启动,则Master不会重新执行先前运行的作业。为了实现这一点,您可以创建群集并为群集提供额外的主节点,并对其进行设置,以便ZooKeeper可以保持Masters状态,并在发生故障时在两者之间进行交换。当您以这种方式设置群集时,主人知道它以前执行的作业并代表您恢复它们,新的Master已经带头。

您可以阅读如何创建备用Spark Master节点in the documentation