没有反应的Spark Master

时间:2015-02-15 07:52:30

标签: macos scala apache-spark

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

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

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

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

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.

知道问题是什么? 感谢

3 个答案:

答案 0 :(得分:4)

您可以在致电spark-submit时设置主设备,或者通过SparkConf明确设置(在此处完成)。请尝试按照Spark Configuration docs中的示例操作,并按如下方式设置主文件:

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

从同一页面(解释local后面括号中的数字):“请注意,我们使用local [2]运行,意味着两个线程 - 代表”最小“并行性,这可以帮助检测错误只有当我们在分布式上下文中运行时才存在。“

答案 1 :(得分:3)

我遇到了同样的问题并最终解决了。在我的情况下,因为我编写了基于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向主服务器发送消息时,会引发不兼容的序列化。最后"所有主人都没有反应"控制台中显示错误消息。

我的解决方案: 1.为scala 2.11重新构建火花(确保你的编程环境为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,然后运行它。它完成了!

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

答案 2 :(得分:0)

我在JAVA中编写代码,但是我遇到了同样的问题。因为我的scala版本是2.10,我的依赖项是2.11。然后我将spark-core_2.11和spark-sql_2.11更改为pom.xml中的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>