我已经下载了为Hadoop 2.6及更高版本预先构建的Apache Spark 1.4.1。我有两台Ubuntu 14.04机器。其中一个我用一个奴隶设置为Spark master,第二个机器运行一个Spark slave。当我执行./sbin/start-all.sh
命令时,主服务器和从服务器成功启动。之后,我将spark-shell
设置--master spark://192.168.0.105:7077
中的示例PI程序运行到Spark Web UI中显示的Spark主URL。
到目前为止,一切都很好。
我创建了一个Java应用程序,并尝试将其配置为在需要时运行Spark作业。我在pom.xml
文件中添加了spark依赖项。
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>1.4.1</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming_2.11</artifactId>
<version>1.4.1</version>
</dependency>
我创建了一个SparkConfig
:
private parkConf sparkConfig = new SparkConf(true)
.setAppName("Spark Worker")
.setMaster("spark://192.168.0.105:7077");
我使用SparkContext
创建SparkConfig
:
private SparkContext sparkContext = new SparkContext(sparkConfig);
在此步骤中抛出以下错误:
java.lang.IllegalStateException: Cannot call methods on a stopped SparkContext
at org.apache.spark.SparkContext.org$apache$spark$SparkContext$$assertNotStopped(SparkContext.scala:103)
at org.apache.spark.SparkContext.getSchedulingMode(SparkContext.scala:1503)
at org.apache.spark.SparkContext.postEnvironmentUpdate(SparkContext.scala:2007)
at org.apache.spark.SparkContext.<init>(SparkContext.scala:543)
at com.storakle.dataimport.spark.StorakleSparkConfig.getSparkContext(StorakleSparkConfig.java:37)
at com.storakle.dataimport.reportprocessing.DidNotBuyProductReport.prepareReportData(DidNotBuyProductReport.java:25)
at com.storakle.dataimport.messagebroker.RabbitMQMessageBroker$1.handleDelivery(RabbitMQMessageBroker.java:56)
at com.rabbitmq.client.impl.ConsumerDispatcher$5.run(ConsumerDispatcher.java:144)
at com.rabbitmq.client.impl.ConsumerWorkService$WorkPoolRunnable.run(ConsumerWorkService.java:99)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
如果我将Spark主人改为local
,一切正常。
private parkConf sparkConfig = new SparkConf(true)
.setAppName("Spark Worker")
.setMaster("local");
我在托管Spark Master的同一台机器上运行Java应用程序。
我不知道为什么会这样?到目前为止,我发现的每个文档和示例都表明代码应该与Spark Master URL一起使用。
为什么会发生这种情况以及如何解决这个问题?到目前为止,我已经花了很多时间试图找出这个并没有运气。
答案 0 :(得分:5)
我认为您使用Spark 1.4.1进行Scala 2.10。因此,您需要spark-core_2.10
和spark-streaming_2.10
而不是2.11
。 spark-core_2.11
与为Scala 2.10构建的Spark不兼容。
为Scala 2.11构建Spark,请参阅:
http://spark.apache.org/docs/latest/building-spark.html#building-for-scala-211