当 Spark master 失败时会发生啥?
Posted
技术标签:
【中文标题】当 Spark master 失败时会发生啥?【英文标题】:What happens when Spark master fails?当 Spark master 失败时会发生什么? 【发布时间】:2016-03-05 14:38:47 【问题描述】:驱动程序是否需要持续访问主节点?还是只有 需要获得初始资源分配?如果主人是会发生什么 创建 Spark 上下文后不可用?是不是意味着申请会失败?
【问题讨论】:
【参考方案1】:主节点故障或网络分区的第一个可能也是目前最严重的后果是您的集群将无法接受新的应用程序。这就是为什么当集群与默认配置一起使用时,Master 被认为是单点故障。
正在运行的应用程序将确认主设备丢失,但除此之外,它们应该或多或少地继续工作,就像什么都没发生一样,除了两个重要的例外:
应用程序将无法正常完成 如果主节点宕机,或者网络分区也影响工作节点,从节点将尝试reregisterWithMaster
。如果这个fails multiple times 工人将简单地give up。此时,长时间运行的应用程序(如流媒体应用程序)将无法继续处理,但仍不应导致立即失败。相反,应用程序将等待 master 重新上线(文件系统恢复)或新领导者的联系(Zookeeper 模式),如果发生这种情况,它将继续处理。
【讨论】:
Buf 如果Master重启了,能否从日志中恢复?我从你的帖子中得到了肯定的想法。我的意思也是批处理作业,而不是流式传输。 SA或Yarn重要吗?我认为不会。【参考方案2】:以下是 spark 应用程序在启动时执行的步骤,
-
启动 Spark 驱动程序
Spark Driver,连接到 spark master 进行资源分配。
Spark 驱动程序,将附加在 spark 上下文中的 jar 发送到主服务器。
Spark Driver,不断轮询主服务器以获取作业状态。
如果代码中有改组或广播,数据将通过 spark 驱动程序路由。因此,火花驱动器需要有足够的内存。
如果有任何操作,如 take、takeOrdered 或 collect,数据会在驱动程序上累积。
所以,是的,master 上的失败将导致执行者无法与其通信。因此,他们将停止工作。 主控失败将导致驱动程序无法与它进行工作状态通信。 因此,您的应用程序将失败。
【讨论】:
【参考方案3】:是的,驱动程序和主服务器在 SparkContext 的整个生命周期中不断通信。这允许司机:
在其 Web 界面和 REST API 上显示作业/阶段/任务的详细状态 监听作业开始和结束事件(您可以添加自己的监听器) 等待作业结束(通过同步 API - 例如,rdd.count()
在作业完成之前不会终止)并获取结果
驱动程序和主服务器之间的断开连接将导致作业失败。
【讨论】:
以上是关于当 Spark master 失败时会发生啥?的主要内容,如果未能解决你的问题,请参考以下文章
对于 Spark API,collectAsMap() 函数如何工作