spark应用程序作为rest服务

xghobddn  于 2021-05-27  发布在  Spark
关注(0)|答案(2)|浏览(399)

我有一个关于特定spark应用程序用法的问题。所以我希望我们的spark应用程序像spring boot应用程序一样作为restapi服务器运行,因此它不会是一个批处理过程,而是我们将加载应用程序,然后我们希望保持应用程序的活动状态(不调用spark.close()),并通过我们将定义的一些api将应用程序用作实时查询引擎。我的目标是将其部署到databricks。有什么建议都行。我已经检查了apachelivy,但不确定它是否是一个好的选择。
任何建议都会有帮助。

ohtdti5x

ohtdti5x1#

spark不是设计成这样运行的;除了historyserver和workerui内置之外,它没有restapi服务器框架
如果您想要一个长时间运行的spark操作,那么您可以使用spark流,并通过原始套接字、kafka等向其发出操作,而不是http方法

mbyulnm0

mbyulnm02#

好问题,让我们一步一步地讨论
您可以创建它,它运行良好,下面是示例:
https://github.com/vaquarkhan/springboot-microservice-apache-spark
我相信你一定在考虑创建数据集或Dataframe,并保留在内存中,用作缓存(redis、gemfire等),但这里有一个问题
i) 如果您只有10万个数据,那么您真的不需要apachesparkpowerjava应用程序,它可以快速返回响应。
ii)如果您有PB级的数据,那么作为数据集或Dataframe加载到内存将没有帮助,因为apache spark不支持索引,因为spark不是一个数据管理系统,而是一个快速的批处理数据引擎,而且gemfire可以灵活地为数据的快速检索添加索引。
解决方法:
使用ApacheIgnite的(https://ignite.apache.org/)内存索引(请参阅fast apache spark sql查询)
使用支持索引的数据格式,如orc、parquet等。
那么,为什么不在apachespark中使用spark应用程序而不使用spark.close()。
spring应用程序作为微服务,您需要容器或pcf/bluemix/aws/azure/gcp等上的其他服务,apachespark有自己的世界,需要pcf上没有的计算能力。
spark不是一个数据库,所以它不能“存储数据”。它处理数据并将其临时存储在内存中,但这不是预先存在的存储。
一旦spark作业提交,您就必须在结果之间等待,您无法获取数据。
如何将spark与spring应用程序一起用作rest api调用:
apachelivy是一个服务,它可以通过rest接口轻松地与spark集群进行交互。它支持轻松提交spark作业或spark代码片段、同步或异步结果检索以及spark上下文管理,所有这些都通过简单的rest接口或rpc客户机库实现。
https://livy.apache.org/

相关问题