5

我是 Spark 的新用户。我有一个 Web 服务,允许用户通过从数据库中读取并将结果推回数据库来请求服务器执行复杂的数据分析。我已将这些分析转移到各种 Spark 应用程序中。目前我使用 spark-submit 来部署这些应用程序。

但是,我很好奇,当我的 Web 服务器(用 Java 编写)收到用户请求时,启动相应 Spark 应用程序的“最佳实践”方式是什么?Spark 的文档似乎是使用“spark-submit”,但我宁愿不将命令输出到终端以执行此操作。我看到了一个替代方案,Spark-JobServer,它提供了一个 RESTful 接口来执行此操作,但我的 Spark 应用程序是用 Java 或 R 编写的,这似乎与 Spark-JobServer 的接口不太好。

是否有另一种最佳实践可以从 Web 服务器(Java 中)启动 spark 应用程序,并等待作业成功或失败的状态结果?

任何关于其他人正在做什么来实现这一点的想法都会非常有帮助!谢谢!

4

3 回答 3

1

我也有类似的要求。这是我所做的:

  1. 要提交应用程序,我使用隐藏的 Spark REST 提交 API:http ://arturmkrtchyan.com/apache-spark-hidden-rest-api

  2. 使用相同的 API,您可以查询驱动程序的状态,或者您可以稍后杀死您的工作

  3. 还有另一个隐藏的 UI Json API:http://[master-node]:[master-ui-port]/json/,它以 JSON 格式公开主 UI 上的所有可用信息。

使用“提交 API”我提交一个驱动程序并使用“主 UI API”我等到我的驱动程序和应用程序状态正在运行

于 2016-02-17T15:35:17.690 回答
0

Web 服务器也可以充当 Spark 驱动程序。所以它会有一个SparkContext实例并包含使用 RDD 的代码。

这样做的好处是 Spark 执行器是长期存在的。您不必一直启动/停止它们,从而节省时间。您可以在操作之间缓存 RDD。

一个缺点是,由于执行程序一直在运行,它们占用了集群中其他进程可能使用的内存。另一种情况是您不能拥有多个 Web 服务器实例,因为SparkContext同一个 Spark 应用程序不能拥有多个实例。

于 2015-03-27T12:44:41.907 回答
0

我们正在使用 Spark Job-server,它可以与 Java 一起正常工作,也只需构建 Java 代码的 jar 并用 Scala 包装它以与 Spark Job-Server 一起使用。

于 2016-03-22T03:28:26.970 回答