阅读了这个问题,我想提出以下附加问题:
- 集群管理器是长期运行的服务,它在哪个节点上运行?
- 主节点和驱动节点可能是同一台机器吗?我认为应该有一个规定说明这两个节点应该不同?
- 在驱动程序节点失败的情况下,谁负责重新启动应用程序?会发生什么?即主节点、集群管理器和工作节点会以何种顺序参与其中(如果参与),并且会发生什么?
- 类似于上一个问题:如果主节点失败,会发生什么情况,谁负责从故障中恢复?
阅读了这个问题,我想提出以下附加问题:
1. 集群管理器是一个长期运行的服务,它在哪个节点上运行?
在Spark独立模式中, Cluster Manager 是主进程。 您可以通过运行./sbin/start-master.sh
来在任何地方启动它,在YARN中则为资源管理器。
2. 主节点和驱动节点可能是同一台机器吗?我认为应该有一个规则说明这两个节点应该不同吧?
Master
是每个集群的,而 Driver
是每个应用程序的。对于独立/ YARN 集群,Spark目前支持两种部署模式。
如果使用--deploy-mode client
在主节点上提交了应用程序,则主节点和驱动程序将在同一节点上。请参阅Spark应用程序部署在YARN上的说明。
3. 如果驱动程序节点失败,谁负责重新启动应用程序?会发生什么情况?即主节点、集群管理器和工作节点是否会参与,并按照什么顺序进行?
如果驱动程序失败,所有执行程序任务都将被终止,对于已提交/触发的Spark应用程序而言。
4. 如果Master节点出现故障,会发生什么情况?谁负责恢复故障?
Master节点故障有两种处理方式:
通过使用ZooKeeper实现备用Master:
通过利用ZooKeeper提供的Leader选举和一些状态存储功能,您可以在集群中启动多个Master节点,并连接到相同的ZooKeeper实例。其中一个将被选为“leader”,其他节点将保持待机模式。如果当前的leader节点失效,将选举另一个Master节点,恢复旧Master的状态,然后继续进行任务调度。整个恢复过程(从第一个leader节点失效时)应该需要1到2分钟的时间。请注意,此延迟仅影响调度新应用程序——在Master故障转移期间已经运行的应用程序不受影响。点击此处以获取配置信息
使用本地文件系统实现单节点恢复:
ZooKeeper是面向生产环境高可用性的最佳选择,但如果您想要能够在Master节点宕机时重启Master,则可以使用文件系统模式进行处理。当应用程序和工作节点注册时,它们会将足够的状态写入提供的目录,以便在Master进程重新启动时可以进行恢复。点击此处获取更多详细信息和配置
./sbin/start-master.sh
显式地启动主节点,会发生什么?驱动程序和主节点是否位于同一台机器上?实际上是谁负责生成主节点? - jarspark-submit --master local[*]
,用户程序、驱动程序和主进程之间的关系是如何的?我很困惑。 - fuyi集群管理器是一个长期运行的服务,它在哪个节点上运行?
集群管理器只是资源的管理者,即调度后端用来启动任务的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无法与其通信。因此,他们将停止工作。主节点故障将使驱动程序无法与其进行作业状态通信。因此,您的应用程序将失败。 运行中的应用程序将确认主失效,但除此以外,它们应该继续工作或多或少像没有发生任何事情,并具有两个重要的异常情况: