我试图在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.
知道问题是什么? 感谢
答案 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服务器,它将报告无法找到目标包。
转到conf文件夹,编辑spark-env.sh文件。附加代码行如下:
导出SPARK_SCALA_VERSION =" 2.11"
请运行start-all.sh,并在程序中设置正确的主URL,然后运行它。它完成了!
注意:控制台中的错误消息不够用。因此,您需要切换日志功能以检查发生的情况。您可以转到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>