如何在REST Web服务的上下文中调用spark作业?

时间:2015-01-11 12:35:38

标签: java rest jersey apache-spark

我想在我的restful web服务中运行Spark SQL查询,那么如何通过Jersey上下文运行Spark Context?我需要将我的Spark SQL请求传递给集群,然后通过REST API将结果返回给用户。但是在Spark Documentations中,没有办法在java代码中运行Spark SQL查询而无需将jar文件提交到集群(master / slaves)。

1 个答案:

答案 0 :(得分:4)

如果您使用Spark版本> 1.4然后您可以使用SparkLauncher来运行您的应用程序。

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上下文一直响起,你的应用程序会调用它。