我试图在Spring Boot 2.0应用程序中使用Spark 2.2.1。 在我的应用程序中,我尝试连接到远程独立Spark Cluster。 这是我的Spark配置和Spark上下文bean:
C++
但是当我启动我的应用时,它会发出以下错误:
@Bean
public SparkConf sparkConf() {
return new SparkConf()
.setAppName("testSpark")
.setMaster("spark://<spark-ip>:7077")
.setJars(new String[]{"/path/to/my/app.jar"})
.set("spark.cassandra.connection.host",env.getProperty(AppConfig.CONTACTPOINTS));
}
@Bean
public JavaSparkContext javaSparkContext() {
return new JavaSparkContext(sparkConf());
}
我也尝试使用本地[*] spark而不是remote - 并且它有效。 而且我也试图制作简单的java spark应用程序,并连接到远程集群,但没有Spring - 它也被淹没了。
那么使用Spark with Spring会出现什么问题?
答案 0 :(得分:1)
正如@ErnestKiwele所暗示的,这个问题是由Netty依赖性引起的
Spring Boot 2.0(使用Spring 5)使用Netty 4.1.x,其中Spark 2.2.1使用Netty 4.0.x.要解决此问题,您可以覆盖pom中的Netty依赖关系以使用旧版本:
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.0.43.Final</version>
</dependency>
因此,maven将使用此netty版本。它解决了我的问题。
但是如果你还需要使用其他一些弹簧库(e.x. cassandra spring数据,就像我一样),它可能会导致问题,因为Spring 5无法使用旧版本的netty。这就意味着,Spark 2.2.x及更低版本不支持Spring 5. Spark 2.3.0使用Netty 4.1.x - 它在Spring 5中没有问题(但它还有cassandra连接器bug,对我来说至关重要)。 因此,在我的情况下,我不得不使用Spring Boot 1.5.x(Spring 4),它使用了强大的netty版本,并且它可以与Spark 2.2.1一起使用