当Spark主节点失败时会发生什么?

14

驱动程序是否需要不断访问主节点?还是仅需要获取初始资源分配?如果在创建了Spark上下文之后主节点不可用会发生什么?这是否意味着应用程序将失败?

3个回答

15

一个主节点的故障或网络分区最严重的后果可能就是集群无法接受新应用。这就是为什么在使用默认配置的情况下,Master被认为是单点故障。

应用程序会意识到主节点的丢失,但除此之外,它们应该继续工作,基本上就像没有发生任何事情一样,并有两个重要的例外:

  • 应用程序将无法优雅地完成
  • 如果主节点宕机,或者网络分区影响了工作节点,那么从节点将尝试重新向主节点reregisterWithMaster。如果这个失败多次,从节点将会放弃。此时,长时间运行的应用程序(如流处理应用)将无法继续处理,但这仍然不应导致立即失败。相反,应用程序将等待主节点重新上线(文件系统恢复)或新领导者的联系(Zookeeper模式)。如果这样做,应用程序将会继续处理。

如果Master重新启动,它能从日志中恢复吗?我从您的帖子中得到了这个概念。我的意思是批处理作业,而不是流式处理。SA或Yarn有关系吗?我认为没有。 - thebluephantom

7
以下是Spark应用程序启动时所执行的步骤:
  1. 启动Spark Driver
  2. Spark Driver连接到Spark Master进行资源分配。
  3. Spark Driver通过Spark上下文将附加的jar文件发送到主服务器。
  4. Spark Driver不断轮询主服务器以获取作业状态。
  5. 如果代码中存在shuffle或broadcast操作,则数据将通过Spark Driver路由。因此,需要为Spark Driver分配足够的内存。
  6. 如果存在take、takeOrdered或collect等操作,则数据会在驱动程序上累积。
是的,如果主节点出现故障,执行程序将无法与其通信。因此,它们将停止工作。 如果主节点发生故障,则驱动程序将无法与其通信以获取作业状态。 因此,您的应用程序将失败。

3
是的,驱动程序和主节点在SparkContext的生命周期内不断地进行通信。这使得驱动程序能够:
  • 在其Web界面和REST API上显示作业/阶段/任务的详细状态
  • 侦听作业启动和结束事件(您可以添加自己的侦听器)
  • 等待作业结束(通过同步API - 例如rdd.count()将在作业完成之前不会终止)并获取其结果
驱动程序和主节点之间的断开将导致作业失败。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接