Java 如何在RESTWeb服务上下文中调用spark作业?

Java 如何在RESTWeb服务上下文中调用spark作业?,java,rest,jersey,apache-spark,Java,Rest,Jersey,Apache Spark,我想在restful web服务中运行Spark SQL查询,那么如何通过Jersey上下文运行Spark上下文呢?我需要将sparksql请求传递给集群,然后通过restapi将结果返回给用户。但是在Spark文档中,如果不将jar文件提交到集群(主/从),就无法在java代码中运行Spark SQL查询。如果您使用的是Spark version>1.4,则可以使用来运行应用程序 import org.apache.spark.launcher.SparkLauncher; public c

我想在restful web服务中运行Spark SQL查询,那么如何通过Jersey上下文运行Spark上下文呢?我需要将sparksql请求传递给集群,然后通过restapi将结果返回给用户。但是在Spark文档中,如果不将jar文件提交到集群(主/从),就无法在java代码中运行Spark SQL查询。

如果您使用的是Spark version>1.4,则可以使用来运行应用程序

import org.apache.spark.launcher.SparkLauncher;

public class MyLauncher {
  public static void main(String[] args) throws Exception {
    Process spark = new SparkLauncher()
      .setAppResource("/my/app.jar")
      .setMainClass("my.spark.app.Main")
      .setMaster("local")
      .setConf(SparkLauncher.DRIVER_MEMORY, "2g")
      .launch();
    spark.waitFor();
  }
}
为了让它工作,你应该给它一个jar文件。由于您希望运行SparkSQL查询,因此可以将其打包到单个jar文件中,也可以将jar作为要执行的查询的参数


需要注意的是,每次要执行查询时都必须开始停止SparkContext。如果你不介意等,那就好了。但是,如果时间是一件大事,那么我建议编写一个单独的服务,让spark上下文始终处于启动状态,并且您的应用程序将调用它。

我刚刚意识到这个问题已经很老了,但是由于它没有得到回答,而且可能有人有相同的问题,所以我回答了它!