当前位置: 首页 > 面试题库 >

从Java应用程序连接到Spark Standalone时,为什么引发“无法在停止的SparkContext上调用方法”?

漆雕伟志
2023-03-14
问题内容

我已经下载了为Hadoop 2.6及更高版本预构建的Apache Spark 1.4.1。我有两台Ubuntu
14.04机器。我已将其中一个设置为具有单个从属设备的Spark主设备,第二台机器正在运行一个Spark从属设备。当我执行./sbin/start- all.sh命令时,主机和从机成功启动。之后,我在Spark Web UI中显示的Spark主URL spark- shell设置中运行示例PI程序--master spark://192.168.0.105:7077

到目前为止,一切都很好。

我创建了一个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 master更改为local一切正常。

private parkConf sparkConfig = new Shtml" target="_blank">parkConf(true)
                .setAppName("Spark Worker")
                .setMaster("local");

我在托管Spark Master的同一台计算机上运行Java应用程序。

我不知道为什么会这样?到目前为止,我发现的每个文档和示例都表明该代码应与Spark Master URL一起使用。

有什么想法为什么会发生以及如何解决?我花了很多时间试图弄清楚这一点,到目前为止还没有运气。


问题答案:

我认为您将Scala 2.10使用Spark 1.4.1。因此,你需要spark-core_2.10spark- streaming_2.10替代2.11spark-core_2.11与为Scala 2.10构建的Spark不兼容。

有关构建Spark for Scala 2.11的信息,请参见:

http://spark.apache.org/docs/latest/building-spark.html#building-for-
scala-211



 类似资料:
  • 我不知道为什么会这样?到目前为止,我找到的每个文档和示例都表明代码应该与Spark Master URL一起工作。 你知道为什么会发生这种事吗?我该怎么解决它?我花了很多时间想弄清楚这件事,但到目前为止还没有运气。

  • 我的项目使用不间断的SQL/MX作为RDBMS数据库,这是HP的产品。我无法使用SpringBoot在应用程序中定义JDBCURL、用户和密码的标准实践连接到数据源。属性文件。 这是错误:

  • 我是Django的新手。我已经创建了一个名为,它在浏览器和邮递员应用程序中都能完美运行。 然而,当我试图从Android应用程序访问API时,它返回NULL。 当API如下所示时,android代码可以工作。 但是,当API为以下API时,它不起作用,即使以下API在同一台PC上运行的浏览器和Postman应用程序中运行良好。 我将代码附加到进行API调用的地方。 有人能帮我吗?提前感谢。

  • 示例代码: 客户端日志: 13/02/06 10:58:32信息zookeeper.clientcnxn:服务器192.168.113.27/192.168.113.27:2181上完成会话建立,sessionid=0x13CAE4BD91B0003,协商超时=40000

  • LOGCAT: 2021-07-18:01:16.9425655-5655/com。实例Androidinterestcalculator E/AndroidRuntime:致命异常:主进程:com。实例Android有趣的镜头图像描述hereculator,PID:5655 java。lang.RuntimeException:无法启动活动组件信息{com.example.android.int

  • 问题内容: 我用Java编写了这个程序 我读到在对象上调用方法会导致,但是上面的程序不是吗?为什么是这样?我是否理解不正确? 问题答案: 是一种方法。一个成员所属的类型,并且不需要一个实例来访问。 甲构件应该仅可以经由型表达访问。也就是说,你应该将其编写如下: Java确实允许你通过对象引用表达式访问成员,但这非常容易引起误解,因为这不是成员访问的实际语义。 通过对象引用表达式访问成员时,仅声明的