Apache spark 如何从web应用程序中利用spark群集?

Apache spark 如何从web应用程序中利用spark群集?,apache-spark,Apache Spark,很多人都问过这个问题,但除了链接和参考资料外,没有明确的答案,而且大多数都不是最近才有的。问题是: 我有一个web应用程序需要利用spark群集来运行spark sql查询。我的理解是提交作业脚本是异步的,因此在这里不起作用。如何在这样的设置中利用spark?我是否可以像在自包含的spark应用程序中那样在web应用程序中编写代码,即创建上下文、设置主URL并执行我需要执行的操作?这在web应用程序中有效吗?如果是,那么何时需要提供REST API的作业服务器来提交作业?用于启动Spark应用程

很多人都问过这个问题,但除了链接和参考资料外,没有明确的答案,而且大多数都不是最近才有的。问题是:
我有一个web应用程序需要利用spark群集来运行spark sql查询。我的理解是提交作业脚本是异步的,因此在这里不起作用。如何在这样的设置中利用spark?我是否可以像在自包含的spark应用程序中那样在web应用程序中编写代码,即创建上下文、设置主URL并执行我需要执行的操作?这在web应用程序中有效吗?如果是,那么何时需要提供REST API的作业服务器来提交作业?

用于启动Spark应用程序的库。

此库允许应用程序以编程方式启动Spark。该库只有一个入口点——SparkLauncher

要启动Spark应用程序,只需实例化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();
     }
   }
参考资料:

我认为选项将是

  • 通过像Livy这样的RESTAPI(Livy是一个新的开源Spark rest) 用于从提交Spark作业并与之交互的服务器 或者spark服务器(RESTAPI)-查看它们如何连接到 使用内核以交互方式激发-

  • 通过jdbc(通过Thrift jdbc/ODBC服务器运行)

  • 通过ssh提交作业并等待纱线状态(这将 连接到集群并通过纱线进行火花提交 给您一个应用程序ID,您可以跟踪应用程序 带纱线应用状态命令的状态)

如果我理解正确,您希望使用代码从您的Web应用程序运行Spark应用程序?是的,没错。您所说的Spark server是指Spark作业服务器还是其他?JDBC选项是否通过spark thrift服务器?您能否详细说明如何以编程方式使用第三个选项?是否可以从代码提交到集群,等待并获得可以返回到前端的响应?我在本论坛的其他帖子中读到,SparkLauncher解决方案仅在master设置为local时才起作用。它在集群模式下也能工作吗?我已经通过它提交了集群模式下的纱线应用程序。知道这件事很好。如何从启动的应用程序同步返回结果?如果您打算将结果拉回到驱动程序,则可以使用驱动程序代码获取结果,否则您将在某个存储中存储/推送结果并从那里获取。当您说“使用驱动程序程序代码获取结果”时,您的意思是,从应用程序将写入的某个持久存储中获取结果?启动作业后或作业完成后spark.waitFor()何时返回?