读完这个问题后,我想问更多问题:
- Cluster Manager 是一个长时间运行的服务,它运行在哪个节点上?
- Master和Driver节点是否可能是同一台机器?我认为应该在某处有一条规则说明这两个节点应该不同?
- 如果 Driver 节点发生故障,谁负责重新启动应用程序?究竟会发生什么?即主节点、集群管理器和工人节点将如何参与(如果他们参与),以及以什么顺序参与?
- 与上一个问题类似:万一Master节点发生故障,究竟会发生什么,谁负责从故障中恢复?
读完这个问题后,我想问更多问题:
1、集群管理器是一个长时间运行的服务,它运行在哪个节点上?
Cluster Manager 是Spark 独立模式下的主进程。它可以在任何地方通过做来启动./sbin/start-master.sh
,在 YARN 中它将是资源管理器。
2. Master和Driver节点有可能是同一台机器吗?我认为应该在某处有一条规则说明这两个节点应该不同?
Master
每个集群,Driver
每个应用程序。对于独立/纱线集群,Spark 目前支持两种部署模式。
--deploy-mode client
如果在 Master 节点上提交的应用程序,则Master 和 Driver 将在同一个节点上。通过 YARN检查Spark 应用程序的部署
3、Driver节点出现故障的情况下,谁负责重新启动应用?究竟会发生什么?即主节点、集群管理器和工人节点将如何参与(如果他们参与),以及以什么顺序参与?
如果驱动程序失败,则该提交/触发的 spark 应用程序的所有 executors 任务将被终止。
4.如果Master节点发生故障,具体会发生什么情况,谁负责从故障中恢复?
主节点故障有两种处理方式。
使用 ZooKeeper 的备用主机:
利用 ZooKeeper 提供领导选举和一些状态存储,您可以在集群中启动多个连接到同一个 ZooKeeper 实例的 Master。一个人将被选为“领导者”,其他人将保持待机模式。如果当前的leader死掉了,会选举出另一个Master,恢复旧Master的状态,然后恢复调度。整个恢复过程(从第一个领导者宕机开始)应该需要 1 到 2 分钟。请注意,此延迟仅影响调度新应用程序 - 在主故障转移期间已经运行的应用程序不受影响。在这里检查配置
使用本地文件系统进行单节点恢复:
ZooKeeper 是实现生产级高可用性的最佳方式,但如果您希望在 Master 宕机时能够重新启动它,FILESYSTEM 模式可以处理它。当应用程序和 Worker 注册时,它们有足够的状态写入提供的目录,以便它们可以在主进程重新启动时恢复。在这里查看conf和更多细节
Cluster Manager 是一个长时间运行的服务,它运行在哪个节点上?
集群管理器只是调度器后端用来启动任务的资源管理器,即 CPU 和 RAM。集群管理器对 Apache Spark 没有任何作用,只是提供资源,一旦 Spark 执行器启动,它们就直接与驱动程序通信以运行任务。
您可以通过执行以下命令来启动独立的主服务器:
./sbin/start-master.sh
可以在任何地方启动。
在 Spark 集群上运行应用程序
./bin/spark-shell --master spark://IP:PORT
Master和Driver节点是否可能是同一台机器?我认为应该在某处有一条规则说明这两个节点应该不同?
在独立模式下,当您启动机器时,某些 JVM 将启动。您的 Spark Master 将启动,并且在每台机器上 Worker JVM 将启动,它们将向 Spark Master 注册。两者都是资源管理器。当您启动应用程序或以集群模式提交应用程序时,无论您执行 ssh 以启动该应用程序,驱动程序都会启动。Driver JVM 将与 Spark Master 联系以获取 executors(Ex),并且在独立模式下,Worker 将启动 Ex。所以 Spark Master 是每个集群,Driver JVM 是每个应用程序。
如果 Driver 节点发生故障,谁负责重新启动应用程序?究竟会发生什么?即主节点、集群管理器和工人节点将如何参与(如果他们参与),以及以什么顺序参与?
如果 Ex JVM 崩溃,Worker JVM 将启动 Ex,当 Worker JVM 生病崩溃时,Spark Master 将启动它们。并且对于具有集群部署模式的 Spark 独立集群,您还可以指定--supervise以确保驱动程序在以非零退出代码失败时自动重新启动。Spark Master 将启动 Driver JVM
与上一个问题类似:万一Master节点发生故障,究竟会发生什么,谁负责从故障中恢复?
在 master 上失败将导致 executors 无法与其通信。因此,他们将停止工作。主控失败将导致驱动程序无法与它进行工作状态通信。因此,您的应用程序将失败。正在运行的应用程序将确认主丢失,但除此之外,它们应该或多或少地继续工作,就像什么都没发生一样,除了两个重要的例外:
1.应用程序将无法以优雅的方式完成。
2.如果Spark Master宕机,Worker会尝试reregisterWithMaster。如果多次失败,工人将干脆放弃。
reregisterWithMaster()-- 重新注册到这个 worker 一直在与之通信的活动 master。如果没有,那么这意味着这个worker仍在引导并且还没有与master建立连接,在这种情况下我们应该重新注册所有的master。在失败期间仅向活动主服务器重新注册很重要。工作者无条件地尝试向所有主服务器重新注册,可能会出现竞争条件。SPARK-4592 中详细说明的错误:
此时,长时间运行的应用程序将无法继续处理,但仍不应导致立即失败。相反,应用程序将等待 master 重新上线(文件系统恢复)或来自新领导者的联系(Zookeeper 模式),如果发生这种情况,它将继续处理。