我有一个 Spark Standalone(不是 YARN/Mesos)集群和一个正在运行的驱动程序应用程序(在客户端模式下),它与该集群通信以执行其任务。但是,如果我关闭并重新启动 Spark 主节点和工作节点,驱动程序不会重新连接到主节点并恢复其工作。
也许我对Spark Master和驾驶员之间的关系感到困惑。在这种情况下,Master 是否负责重新连接回 driver?如果是这样,主设备是否将其当前状态序列化到磁盘上的某个位置,以便在重新启动时可以恢复?
这种情况Master负责重连吗
回到司机那里?如果是,Master是否序列化其当前状态
到磁盘某个地方可以在重新启动时恢复?
主节点和驱动程序之间的关系取决于几个因素。首先,驱动程序是托管您的驱动程序SparkContext
/StreamingContext
并负责工作的执行。它创建 DAG,并持有DAGScheduler
and TaskScheduler
分别分配阶段/任务。如果您使用 Spark Standalone 并在“客户端模式”下运行作业,则主节点可以充当驱动程序的主机。这样,Master 还托管驱动程序进程,如果它死亡,驱动程序也会随之死亡。如果使用“集群模式”,驱动程序驻留在其中一个工作节点上,并频繁与主节点通信以获取当前正在运行的作业的状态、发回有关已完成批次的状态的元数据等。
在 Standalone 上运行时,如果 Master 挂掉并且您重新启动它,Master 不会重新执行之前运行的作业。为了实现这一点,您可以创建并向集群提供一个额外的主节点,并将其设置为 ZooKeeper 可以保存主节点状态,并在发生故障时在两者之间进行交换。当您以这种方式设置集群时,Master 会知道它之前执行的作业,并代表您恢复它们(新 Master 已带头)。
您可以阅读如何创建备用 Spark Master 节点在文档中 http://spark.apache.org/docs/latest/spark-standalone.html#standby-masters-with-zookeeper.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)