了解Spark:集群管理器、主节点和驱动节点

32

阅读了这个问题,我想提出以下附加问题:

  1. 集群管理器是长期运行的服务,它在哪个节点上运行?
  2. 主节点和驱动节点可能是同一台机器吗?我认为应该有一个规定说明这两个节点应该不同?
  3. 在驱动程序节点失败的情况下,谁负责重新启动应用程序?会发生什么?即主节点、集群管理器和工作节点会以何种顺序参与其中(如果参与),并且会发生什么?
  4. 类似于上一个问题:如果主节点失败,会发生什么情况,谁负责从故障中恢复?

可能会有帮助:https://dev59.com/1WAf5IYBdhLWcg3wMwXX#65065053 - jack
2个回答

39

1. 集群管理器是一个长期运行的服务,它在哪个节点上运行?

在Spark独立模式中, Cluster Manager 是主进程。 您可以通过运行./sbin/start-master.sh 来在任何地方启动它,在YARN中则为资源管理器。

2. 主节点和驱动节点可能是同一台机器吗?我认为应该有一个规则说明这两个节点应该不同吧?

Master 是每个集群的,而 Driver 是每个应用程序的。对于独立/ YARN 集群,Spark目前支持两种部署模式。

  1. 客户端模式下,驱动程序在与提交应用程序的客户端相同的进程中启动。
  2. 在群集模式下,对于独立模式,驱动程序将从其中一个Worker启动;而对于yarn,它会在应用程序的主节点内启动,并且客户端过程会在提交应用程序后立即退出,而不等待应用程序完成。

如果使用--deploy-mode client在主节点上提交了应用程序,则主节点和驱动程序将在同一节点上。请参阅Spark应用程序部署在YARN上的说明

3. 如果驱动程序节点失败,谁负责重新启动应用程序?会发生什么情况?即主节点、集群管理器和工作节点是否会参与,并按照什么顺序进行?

如果驱动程序失败,所有执行程序任务都将被终止,对于已提交/触发的Spark应用程序而言。

4. 如果Master节点出现故障,会发生什么情况?谁负责恢复故障?

Master节点故障有两种处理方式:

  1. 通过使用ZooKeeper实现备用Master:

    通过利用ZooKeeper提供的Leader选举和一些状态存储功能,您可以在集群中启动多个Master节点,并连接到相同的ZooKeeper实例。其中一个将被选为“leader”,其他节点将保持待机模式。如果当前的leader节点失效,将选举另一个Master节点,恢复旧Master的状态,然后继续进行任务调度。整个恢复过程(从第一个leader节点失效时)应该需要1到2分钟的时间。请注意,此延迟仅影响调度新应用程序——在Master故障转移期间已经运行的应用程序不受影响。点击此处以获取配置信息

  2. 使用本地文件系统实现单节点恢复:

    ZooKeeper是面向生产环境高可用性的最佳选择,但如果您想要能够在Master节点宕机时重启Master,则可以使用文件系统模式进行处理。当应用程序和工作节点注册时,它们会将足够的状态写入提供的目录,以便在Master进程重新启动时可以进行恢复。点击此处获取更多详细信息和配置


如果我们不使用 ./sbin/start-master.sh 显式地启动主节点,会发生什么?驱动程序和主节点是否位于同一台机器上?实际上是谁负责生成主节点? - jar
当我们不使用./sbin/start-master.sh显式地启动主节点时,会发生什么?这取决于spark-submit/shell命令中的--master参数设置。谁负责生成主节点?负责设置基础设施以运行Spark应用程序的人。 - mrsrinivas
一个后续问题,如果命令是 spark-submit --master local[*],用户程序、驱动程序和主进程之间的关系是如何的?我很困惑。 - fuyi

9

集群管理器是一个长期运行的服务,它在哪个节点上运行?

集群管理器只是资源的管理者,即调度后端用来启动任务的CPU和RAM。集群管理器对Apache Spark没有其他作用,只是提供资源,一旦Spark执行器启动,它们直接与驱动程序通信以运行任务。

您可以通过执行以下操作启动独立的主服务器:

./sbin/start-master.sh

可以在任何地方开始。

在Spark集群上运行应用程序

./bin/spark-shell --master spark://IP:PORT
是否可能主节点和驱动节点是同一台机器? 我认为这里应该有一个规则,规定这两个节点应该不同? 在独立模式下,当您启动计算机时,某些JVM将启动。您的SparK Master将启动,并且每台机器上的Worker JVM都将启动并向Spark Master注册。二者均为资源管理器。在集群模式下,当您启动或提交应用程序时,无论您在何处进行ssh以启动该应用程序,Driver都会启动。 Driver JVM将联系SparK Master获取executors(Ex),而在独立模式下,Worker会启动Ex。因此,Spark Master是每个群集,而Driver JVM是每个应用程序。 如果驱动节点失败,谁负责重新启动应用程序? 发生了什么事情? 如果Ex JVM崩溃,则Worker JVM将启动Ex,而当Worker JVM崩溃时,Spark Master将启动它们。对于具有群集部署模式的Spark独立群集,您还可以指定--supervise,以确保驱动程序在非零退出码失败时自动重新启动。Spark Master将启动Driver JVM。 类似于上一个问题:如果主节点失败,会发生什么事情? 谁负责从失败中恢复? 主节点故障将导致executors无法与其通信。因此,他们将停止工作。主节点故障将使驱动程序无法与其进行作业状态通信。因此,您的应用程序将失败。 运行中的应用程序将确认主失效,但除此以外,它们应该继续工作或多或少像没有发生任何事情,并具有两个重要的异常情况:
1.应用程序将无法优雅地完成。
2.如果Spark Master崩溃,则Worker将尝试重新注册WithMaster。如果这失败了多次,工人们将放弃。
reregisterWithMaster() - 重新注册与此工人一直在通信的活动主节点。如果没有,则意味着此工作程序仍在引导过程中,并且尚未与主节点建立连接,在此种情况下,我们应该向所有主节点重新注册。仅向活动主节点重新注册非常重要,并在故障期间无条件地尝试向所有主节点重新注册,可能会出现竞争条件。在这个时候,长时间运行的应用程序将无法继续处理,但这仍不应该立即导致失败。相反,应用程序将等待主机重新联机(文件系统恢复)或新领导者的联系(Zookeeper模式),如果发生这种情况,它将继续处理。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接