Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring启动应用程序的Spark上下文问题_Java_Spring Boot_Apache Spark - Fatal编程技术网

Java Spring启动应用程序的Spark上下文问题

Java Spring启动应用程序的Spark上下文问题,java,spring-boot,apache-spark,Java,Spring Boot,Apache Spark,我使用ApacheSpark编写了一个Spring启动应用程序。它在我的机器上工作得很好,但当我试图将它部署到VM(内存为4 GO、vCPU为2、存储容量为60 GB的Debian 9)上并运行它时,它抛出了一个异常:初始化SparkContext时出错。 java.lang.IllegalArgumentException:已经有一个名为LocalSchedulerBackendEndpoint的RpcEndpoint 我添加了选项:set(“spark.driver.allowMultipl

我使用ApacheSpark编写了一个Spring启动应用程序。它在我的机器上工作得很好,但当我试图将它部署到VM(内存为4 GO、vCPU为2、存储容量为60 GB的Debian 9)上并运行它时,它抛出了一个异常:初始化SparkContext时出错。 java.lang.IllegalArgumentException:已经有一个名为LocalSchedulerBackendEndpoint的RpcEndpoint

我添加了选项:set(“spark.driver.allowMultipleContexts”,“true”),但它也不起作用

我的程序中不使用多个上下文,代码如下:

public Set<Customer> retrieveCustomers(String a) {
        SparkConf sparkConf = new SparkConf().setAppName("Spring boot app ")
                .setMaster("local[2]")
                .set("spark.driver.allowMultipleContexts", "true") ;

         JavaSparkContext ctx = new JavaSparkContext(sparkConf);

    final List<String> stopWords = getStopWords(ctx).collect();
    List<Tuple2<String, Tuple3<String,String,String>>> collect = getCompanies(ctx).collect();
    a = cleanText(a.substring(0,1000));
    String allTextLowerCase = a.toLowerCase();
    JavaRDD<Customer> words = ctx.parallelize(Arrays.asList(SPACE.split(a)))
            .filter(word -> isNotStopWord(word,stopWords))
            .filter(word -> ! word.trim().isEmpty())
            .map(word -> toDenomination(collect,word,allTextLowerCase))
            .filter(Objects::nonNull);
    Set<Customer> customers = new HashSet<>( words.collect());
    System.out.println("Total found Words :" + customers.size());
    ctx.cancelAllJobs();
    ctx.stop();
    System.clearProperty("spark.driver.port");

}
公共集检索客户(字符串a){
SparkConf SparkConf=new SparkConf().setAppName(“春季启动应用程序”)
.setMaster(“本地[2]”)
.set(“spark.driver.allowMultipleContexts”、“true”);
JavaSparkContext ctx=新的JavaSparkContext(sparkConf);
最终列表stopWords=getStopWords(ctx.collect();
List collect=getcompanys(ctx.collect();
a=干净文本(a.子字符串(01000));
字符串allTextLowerCase=a.toLowerCase();
javarddwords=ctx.parallelize(Arrays.asList(SPACE.split(a)))
.filter(word->isNotStopWord(word,StopWord))
.filter(word->!word.trim().isEmpty())
.map(word->toDenomination(collect、word、allTextLowerCase))
.filter(对象::非空);
Set customers=newhashset(words.collect());
System.out.println(“找到的单词总数:+customers.size());
ctx.cancelAllJobs();
ctx.stop();
System.clearProperty(“spark.driver.port”);
}
你有办法解决我的问题吗?为什么应用程序在服务器上初始化了多个Spark上下文,而在localhost中却没有


谢谢

您是否尝试将上下文作为另一个常规Springbean而不是手动实例化注入?无论如何,它应该可以工作,但我想这是使用Spring的正确方法

您从何处调用此方法?多少次


似乎有多个线程同时访问该方法。

您是否尝试将上下文作为另一个常规Springbean而不是手动实例化注入?无论如何,它应该可以工作,但我想这是使用Spring的正确方法

您从何处调用此方法?多少次


似乎有多个线程同时访问该方法。

感谢您的回复。我将尝试这个选项。我从REST服务调用过一次该方法谢谢您的回复。我将尝试这个选项。我从REST服务调用该方法一次