【问题标题】:Unresponsive Spark Master反应迟钝的火花大师
【发布时间】:2025-12-31 15:45:11
【问题描述】:

我正在尝试在 Mac 上以独立模式运行一个简单的 Spark 应用程序。

我设法运行./sbin/start-master.sh 来启动主服务器和工作器。

./bin/spark-shell --master spark://MacBook-Pro.local:7077 也可以,我可以在 Master WebUI 的运行应用程序列表中看到它

现在我正在尝试编写一个简单的 spark 应用程序。

import org.apache.spark.{SparkContext, SparkConf}
import org.apache.spark.SparkContext._

object SimpleApp {
  def main(args: Array[String]) {
    val conf = new SparkConf().setAppName("Simple Application")
                          .setMaster("spark://MacBook-Pro.local:7077")
    val sc = new SparkContext(conf)

    val logFile = "README.md"
    val logData = sc.textFile(logFile, 2).cache()
    val numAs = logData.filter(line => line.contains("a")).count()
    val numBs = logData.filter(line => line.contains("b")).count()
    println("Lines with a: %s, Lines with b: %s".format(numAs, numBs))
  }
}

运行这个简单的应用程序给我一个错误消息,指出 Master 没有响应

15/02/15 09:47:47 INFO AppClient$ClientActor: Connecting to master spark://MacBook-Pro.local:7077...
15/02/15 09:47:48 WARN ReliableDeliverySupervisor: Association with remote system [akka.tcp://sparkMaster@MacBook-Pro.local:7077] has failed, address is now gated for [5000] ms. Reason is: [Disassociated].
15/02/15 09:48:07 INFO AppClient$ClientActor: Connecting to master spark://MacBook-Pro.local:7077...
15/02/15 09:48:07 WARN ReliableDeliverySupervisor: Association with remote system [akka.tcp://sparkMaster@MacBook-Pro.local:7077] has failed, address is now gated for [5000] ms. Reason is: [Disassociated].
15/02/15 09:48:27 INFO AppClient$ClientActor: Connecting to master spark://MacBook-Pro.local:7077...
15/02/15 09:48:27 WARN ReliableDeliverySupervisor: Association with remote system [akka.tcp://sparkMaster@MacBook-Pro.local:7077] has failed, address is now gated for [5000] ms. Reason is: [Disassociated].
15/02/15 09:48:47 ERROR SparkDeploySchedulerBackend: Application has been killed. Reason: All masters are unresponsive! Giving up.
15/02/15 09:48:47 WARN SparkDeploySchedulerBackend: Application ID is not initialized yet.
15/02/15 09:48:47 ERROR TaskSchedulerImpl: Exiting due to error from cluster scheduler: All masters are unresponsive! Giving up.

知道是什么问题吗? 谢谢

【问题讨论】:

    标签: macos scala apache-spark


    【解决方案1】:

    您可以在调用spark-submit 时设置主控,或者(如您在此处所做的)通过SparkConf 显式设置它。尝试按照Spark Configuration docs中的例子,设置master如下:

    val conf = new SparkConf().setMaster("local[2]")

    来自同一页面(解释local 后面括号中的数字):“请注意,我们使用本地 [2] 运行,这意味着两个线程 - 表示“最小”并行度,这有助于检测仅存在的错误当我们在分布式上下文中运行时。”

    【讨论】:

    • 使用 .setMaster("local[2]") 解决了我的问题。但我仍然想知道为什么用 spark://HOST:PORT 设置 master 不起作用。此外,由于某种原因,在使用本地 [2] 时,我无法访问母版 WebUI
    • web ui 应该在localhost:8080 可用,根据the spark standalone cluster guides": "一旦启动,master 将为自己打印一个spark://HOST:PORT URL,您可以使用它来连接worker它,或作为“主”参数传递给SparkContext。你也可以在master的web UI上找到这个URL,默认是http://localhost:8080。”
    • @Shahaf 我遇到了同样的问题,我认为这对你来说不是一个真正的解决方案。使用 local 将不会在您的 master 上运行,这可以通过在您的 master GUI 中检查已完成的应用程序来证明。如果您使用local 运行,则不会出现任何内容。
    【解决方案2】:

    我遇到了同样的问题并最终解决了。就我而言,因为我基于 scala 2.11 编写了源代码。但是对于 spark,我使用 Maven 按照默认命令构建它:

    build/mvn -Phadoop-2.4 -Dhadoop.version=2.4.0 -DskipTests clean package
    

    根据这个构建脚本,它会将 scala 的版本设置为 2.10 版本。由于 Spark Client 和 Master 之间的 scala 版本不同,当客户端通过远程 actor 向 master 发送消息时会引发不兼容的序列化。最后在控制台中显示“所有主服务器均无响应”错误消息。

    我的解决方案: 1. 为 scala 2.11 重新构建 spark(确保您的编程环境为 scala 2.11)。请在 SPARK_HOME 中运行如下命令:

    dev/change-version-to-2.11.sh
    mvn -Pyarn -Phadoop-2.4 -Dscala-2.11 -DskipTests clean package
    

    构建后,包将位于 SPARK_HOME/assembly/target/scala-2.11。如果你使用 start-all.sh 启动你的 Spark 服务器,它会报告找不到目标包。

    1. 进入 conf 文件夹,编辑 spark-env.sh 文件。添加如下代码行:

      导出 SPARK_SCALA_VERSION="2.11"

    2. 请运行 start-all.sh,并在您的程序中设置正确的主 url,然后运行它。搞定了!

    注意:控制台中的错误信息是不够的。因此,您需要打开日志功能以检查发生的情况。您可以转到 conf 文件夹,并将 log4j.properties.template 复制到 log4j.properties。 spark master 启动后,日志文件将保存在 SPARK_HOME/logs 文件夹中。

    【讨论】:

    • 我认为这会导致问题,但我希望有更好的错误消息暗示已检查。
    【解决方案3】:

    我用 JAVA 编写代码,但遇到了同样的问题。因为我的 scala 版本是 2.10,所以我的依赖项是 2.11。然后我将 pom.xml 中的 spark-core_2.11 和 spark-sql_2.11 更改为 spark-core_2.10 和 spark-sql_2.10。也许你可以用类似的方式解决你的问题。

    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-core_2.10</artifactId>
        <version>${spark.version}</version>
    </dependency>
    
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-sql_2.10</artifactId>
        <version>${spark.version}</version>
    </dependency>
    

    【讨论】: