(七)Spark学习笔记之HA

高可用配置HA

默认情况下,standalone 调度集群能够处理 worker 故障,其通过将计算任务转移到其他 worker 节点,再次开始计算。然而,调度器只是用了一个 master 来做调度决策,这可能会产生一个单点故障。如果 master 崩溃,就不能提交新的应用程序。为了克服这个问题,有两个高可用方案。

standby Masters with Zookeeper

使用 Zookeeper 来提供 leader 选举和一些状态存储,可以在集群中启动多个连接到同一个 Zookeeper 实例的 master 服务器。其中一个将被选为 “leader”,其它的将保持 standby 状态。如果当前 leader 挂掉,将选举另一个 master 成为 leader ,回复旧 master 的状态,然后恢复调度工作。整个恢复过程需要 1 到 2 分钟。注意,这种延迟只影响调度新应用程序——在 master 故障转移期间已经运行的应用程序不受影响。

配置

为了启用这个恢复模式,可以在 spark-env.sh 中设置 SPARK_DAEMON_JAVA_OPTS,配置 spark.deploy.recoveryMode 和 spark.deploy.zookeeper.* 相关配置。可参阅配置文档

可能的陷阱:如果集群中有多个 maser,但是没有正确地配置 master 来使用 Zookeeper,那么 master 将无法彼此发现,并认为自己都是 leader。这将不会导致一个健康的集群状态。

详细

在设置了 Zookeeper 集群之后,启动高可用性就很简单了。只需要使用相同的 Zookeeper 配置在不同的节点上启动多个 master 进程。master 可以在任何时候添加和删除。

为了安排新的应用程序或将 worker 添加到集群中,它们需要知道当前 leader master 的 IP 地址。这可以通过简单地传递一个 master URL 列表来实现,以前在这些 master 列表中只传递一个 master URL。例如:可以启动 SparkContext,指向 spark://host1:port1,host2:port2 。这将导致 SparkContext 尝试向两个 master 注册— 如果 host1 宕机,这个配置仍然是正确的,因为系统将会找到新的 leader — host2。

“注册到一个 master 服务器” 和 正常操作之间有一个重要的区别。在启动时,应用程序或 worker 需要能够找到并注册到当前的 master。但是一旦成功注册,master 就是在系统中(即存储在 Zookeeper)。如果发生故障转移,新 master leader 将联系所有以前注册的应用程序和 worker,通知它们 leader 的更改,因此它们在启动时甚至不需要知道新 master 的存在。

由于这个属性,可以在任何时候创建新 master,唯一需要担心的是:新应用程序和 worker 可以找到它进行注册,以防它成为 leader。

带有本地文件系统的单节点恢复

概述

zookeeper 是实现产品级高可用性的最佳方法,但如果只是想在 master 服务器宕机时重启它,那么文件系统模式可以解决这个问题。当应用程序和 worker 注册时,它们有足够的状态被写入到提供的目录中,以便在 master 进程重新启动时可以恢复它们。

配置

为了启用这个恢复模式,可以在 spark-env.sh 中设置 SPARK_DAEMON_JAVA_OPTS 的相关配置。

属性 含义
spark.deploy…recoveryMode 将文件系统设置为启动单节点恢复模式
spark.deploy.recoveryDirectory spark将存储恢复状态的目录,从master的角度进行访问

细节

这个解决方案可以与进程监视器/管理器一起使用,或者只是通过重新启动启用手动恢复。

虽然文件系统恢复看起来比不进行恢复要好得多,但是对于某些开发或实验目的的来说,这种模式可能不是最优的。特别是通过 kill master 来停止 master 不会清理它的恢复状态,所以无论何时启动一个新主,它都会进入恢复模式。如果需要等待所有以前注册的 worker/clienter 超时,这将使启动时间增加最多 1 分钟。

虽然不受官方支持,但可以将 NFS 目录挂载为恢复目录。如果原始 master 节点完全死亡,那么可以在另一个节点上启动一个主节点,它将正确地恢复所有以前注册的 worker / 应用程序(zookeeper 恢复)。然而,为了注册,未来的应用程序必须能够找到新的主程序。

HA 实战

spark-env.sh配置

export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=bigdata01:2181,bigdata02:2181,bigdata03:2181 -Dspark.deploy.zookeeper.dir=/opt/spark213/meta"

猜你喜欢

转载自blog.csdn.net/dec_sun/article/details/89389923