14

驱动程序是否需要持续访问主节点?还是只需要获得初始资源分配?如果在 Spark 上下文创建后 master 不可用会发生什么?这是否意味着申请将失败?

4

3 回答 3

15

主故障或网络分区的第一个可能也是目前最严重的后果是您的集群将无法接受新的应用程序。这就是为什么当集群与默认配置一起使用时,Master 被认为是单点故障。

正在运行的应用程序将确认主丢失,但除此之外,它们应该或多或少地继续工作,就像没有发生任何事情一样,除了两个重要的例外:

  • 应用程序将无法正常完成
  • 如果 master 宕机,或者网络分区也影响了 worker 节点,slave 将尝试reregisterWithMaster. 如果多次失败,工人将干脆放弃。此时,长时间运行的应用程序(如流媒体应用程序)将无法继续处理,但仍不应导致立即失败。相反,应用程序将等待 master 重新上线(文件系统恢复)或来自新领导者的联系(Zookeeper 模式),如果发生这种情况,它将继续处理。
于 2016-03-06T01:05:52.047 回答
7

以下是 spark 应用程序在启动时执行的步骤,

  1. 启动 Spark 驱动程序
  2. Spark Driver,连接到 spark master 进行资源分配。
  3. Spark 驱动程序,将附加在 spark 上下文中的 jar 发送到主服务器。
  4. Spark Driver,不断轮询主服务器以获取作业状态。
  5. 如果代码中有改组或广播,则数据通过火花驱动程序路由。这就是为什么火花驱动器需要有足够的内存。
  6. 如果有 take、takeOrdered 或 collect 等操作,则数据在驱动程序上累积。

所以,是的,master 上的失败将导致执行者无法与之通信。因此,他们将停止工作。主控失败将导致驱动程序无法与它进行工作状态通信。因此,您的应用程序将失败。

于 2016-03-19T04:45:32.080 回答
3

是的,驱动程序和主服务器在 SparkContext 的整个生命周期中不断通信。这允许驾驶员:

  • 在其 Web 界面和 REST API 上显示作业/阶段/任务的详细状态
  • 监听作业开始和结束事件(您可以添加自己的监听器)
  • 等待作业结束(通过同步 API - 例如rdd.count()在作业完成之前不会终止)并获得结果

驱动程序和主服务器之间的断开连接将导致作业失败。

于 2016-03-05T16:39:03.847 回答