我是Spark的新用户。我有一个web服务,它允许用户通过从数据库读取并将结果推回到数据库来请求服务器执行复杂的数据分析。我已经将这些分析转移到了各种Spark应用程序中。目前我使用spark-submit来部署这些应用程序。
然而,我很好奇,当我的web服务器(用Java编写)收到用户请求时,什么被认为是启动相应Spark应用程序的“最佳实践”?spark的文档似乎使用了"spark-submit“,但我不希望通过管道将命令发送到终端来执行此操作。我看到了一个替代方案,Spark-JobServer,它提供了一个RESTful接口来做这件事,但我的Spark应用程序是用Java或R编写的,这似乎与Spark-JobServer不能很好地接口。
有没有另一种最佳实践,从web服务器启动一个spark应用程序(用Java编写),然后等待作业成功或失败的状态结果?
任何关于其他人正在做什么的想法都会非常有帮助!谢谢!
发布于 2016-02-17 23:35:18
我也有类似的需求。下面是我所做的:
要提交应用程序,我使用隐藏的Spark REST提交接口:http://arturmkrtchyan.com/apache-spark-hidden-rest-api
我使用“提交API”提交驱动程序,并使用"Master UI API“等待我的驱动程序和应用程序状态运行
发布于 2015-03-27 20:44:42
web服务器也可以充当Spark驱动程序。因此,它将有一个SparkContext实例,并包含使用RDDs的代码。
这样做的好处是Spark executors是长寿的。您不必一直启动/停止它们,从而节省了时间。您可以在操作之间缓存RDDs。
一个缺点是,由于执行器一直在运行,它们会占用集群中的其他进程可能使用的内存。另一个问题是,您不能拥有多个web服务器实例,因为同一个Spark应用程序不能有多个SparkContext。
发布于 2016-03-22 11:28:27
我们正在使用Spark Job-Server,它与Java一起工作得很好,只需构建Java代码的jar,并用Scala将其包装起来,就可以与Spark Job-server一起工作。
https://stackoverflow.com/questions/29282408
复制相似问题