在恢复模式下注册Spark应用程序时可能出现死锁

时间:2016-04-18 02:17:54

标签: java scala apache-spark

我在独立恢复模式下遇到了一个小问题。

假设有一个应用程序A在群集中运行。由于某些问题,整个群集与应用程序A一起关闭。

然后,群集重新上线,然后主人进入“恢复”状态。模式,因为它看到一些应用程序,工作人员和驱动程序已经从Persistence Engine进入集群。在恢复过程中,应用程序重新上线,但现在它将具有不同的ID,让我们说B.

但是,根据主程序,应用程序注册逻辑,此应用程序B将不会添加到“等待应用程序”中。消息""尝试在同一地址"重新注册申请。 [1]

  private def registerApplication(app: ApplicationInfo): Unit = {
    val appAddress = app.driver.address
    if (addressToApp.contains(appAddress)) {
      logInfo("Attempted to re-register application at same address: " + appAddress)
      return
    }

这里的问题是,master正在尝试恢复不再存在的应用程序A.因此,在恢复过程之后,应用程序A将被删除。然而,应用程序A的继任者,应用程序B也被省略了等待应用程序'列表,因为它与之前的App A具有相同的地址。

这会在群集中创建死锁,群集中可以使用app A或app B.

当主服务器处于RECOVERING模式时,不应该首先将所有注册应用程序添加到列表中,然后在完成恢复后(一旦删除不成功的恢复),请部署新的应用程序?

这可以解决IMO这个僵局吗?

期待收到你的来信。

最好

[1] https://github.com/apache/spark/blob/master/core/src/main/scala/org/apache/spark/deploy/master/Master.scala#L834

0 个答案:

没有答案