反应迟钝的火花大师

Unresponsive Spark Master

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

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

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

现在我正在尝试编写一个简单的 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.

知道问题出在哪里吗? 谢谢

您可以在调用 spark-submit 时设置 master,或者(正如您在此处所做的那样)通过 SparkConf 明确设置它。尝试按照 Spark Configuration docs 中的示例进行操作,并将 master 设置如下:

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

来自同一页(解释 local 后面括号中的数字):"Note that we run with local[2], meaning two threads - which represents “minimal” parallelism, which can help detect bugs that only exist when we run in a distributed context."

我遇到了同样的问题,终于解决了。就我而言,因为我基于 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 版本不同,当 client 通过 remote actor 向 master 发送消息时,会引发不兼容的序列化。最后 "All masters are unresponsive" 错误消息显示在控制台中。

我的解决方案: 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 server,它会报找不到目标包。

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

    导出 SPARK_SCALA_VERSION="2.11"

  2. 请运行启动-all.sh,并在你的程序中设置正确的masterurl,运行它。完成了!

注意:控制台中的错误信息不够。所以你需要打开你的日志功能来检查发生了什么。你可以去conf文件夹,复制log4j.properties.template到log4j.properties。启动 spark master 后,日志文件将保存在 SPARK_HOME/logs 文件夹中。

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

<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>