java - 从 Spring RESTful 服务运行 Spark 作业

标签 java spring scala rest apache-spark

我想通过 REST API 运行 Spark 作业,并且我想使用 Scala for Spark。我有一个带有 Spring 框架的混合 Java 和 Scala 项目。我可以调用 Scala 方法来创建 SparkContext 并通过 REST API 执行一些工作。设置主 Remote 时出现问题,而不是本地设置时出现问题。

val conf = new SparkConf().setAppName("App").setMaster("local")
val sc = new SparkContext(conf)

很好,但是

val conf = new SparkConf().setAppName("App").setMaster(" spark://10.122.221.164:7077")
val sc = new SparkContext(conf)

导致java.lang.ClassNotFoundException

到目前为止我能找到的解决方案是创建一个 fat-jar 并执行 conf.setJars(...),或者通过 ProcessBuilder 等使用 spark-submit 脚本。

在我当前的设置中,我只有一个 Spring 项目,其中包含 Spark Scala 代码,该项目被打包到 war 文件中以在 Tomcat 等下运行,因此我没有 fat-jar。我不想有一个 Spring 项目和几个单独的 Scala 应用程序,每个应用程序都打包为一个 fat-jar。我怎样才能想出一个简单但合理的架构?

最佳答案

哪个类给出了 ClassNotFoundException ?由此应该清楚,您的 Spark 应用程序依赖于该类,并且需要与 Spark 应用程序一起打包。

它在本地工作,因为它拥有所有可用的 jar,但对于远程,需要将依赖项 jar 传输到驱动程序/执行程序。

如果运行 Spark-submit,您可以看到使用 --jars 指定的依赖项 jar 已传输。

您可以创建 uber jar 或使用 SparkConf.setJars 指定依赖项 jar。

Maven Shade 插件可用于创建 uber jar,并仅指定需要捆绑的 jar。

另外你为什么不使用 SparkLauncher启动 Spark 应用程序。

关于java - 从 Spring RESTful 服务运行 Spark 作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38902544/

相关文章:

java - Java内存分析工具和内存泄漏检测工具有什么区别?

java - 如何从java中的时间句子中提取分钟数?例如 xx 小时 xx 分钟

java - 如何获取 REST 请求的 HTTP 方法

scala - CsvParser 不适用于缺少双引号的情况

java - 如何使用 Java/Scala 从 URL 加载前 x 个字节?

java - Android Array Adapter 选择了错误的 ID

spring - 无法使用 Spring Cloud Consul 和 @EnableDiscoveryClient 连接 RestTemplate

java - apache cxf rest 服务中的 Spring 异常

java - 如何使用自定义@Rule正确配置@RunWith(Parameterized.class) + SpringClassRule + SpringMethodRule?

java.io.FileNotFoundException : File file:/data/home/test/analysis. json 不存在。读取 json 时 Spark 错误