Spark应用程序即服务

时间:2020-08-31 20:26:38

标签: apache-spark

我对特定的Spark应用程序使用有疑问。 因此,我希望我们的Spark应用程序像Spring Boot Applications这样作为REST API服务器运行,因此它不是批处理过程,而是我们将加载该应用程序,然后使该应用程序保持活动状态(不调用spark.close ()),并通过我们将定义的某些API将应用程序用作实时查询引擎。我的目标是将其部署到Databricks。任何建议都会很好。 我已经检查过Apache Livy,但不确定是否会是个好选择。

任何建议都会有所帮助。

2 个答案:

答案 0 :(得分:2)

Spark并非设计为这样运行;除了内置的HistoryServer和Worker UI外,它没有REST API服务器框架。

如果您想要长时间运行的Spark动作,则可以使用Spark Streaming并通过原始套接字,Kafka等(而不是HTTP方法)向其发出动作

答案 1 :(得分:1)

好的问题,让我们逐步讨论

  1. 您可以创建它,并且可以正常工作,下面是示例:
  1. 我确定您必须考虑创建Dataset或Data frame并将其保存在内存中并用作Cache(Redis,Gemfire等),但这很重要

i)如果您只有10万个数据,那么您真的不需要Apache Spark强大的Java应用程序,可以很好地快速返回响应。

ii)如果您有PB级数据,则由于Apache Spark不支持索引,因此无法以数据集或数据帧的形式加载到内存中,因为Spark不是数据管理系统,而是快速批处理数据引擎,因此Gemfire可以灵活地添加索引以快速检索数据。

解决方法:

  • 使用Apache Ignite的(https://ignite.apache.org/)内存索引(请参阅快速 Apache Spark SQL查询)

  • 使用支持索引的数据格式,例如ORC,Parquet等。

所以为什么不使用spark.close()而不将Sparing应用程序与Apache Spark一起使用。

  1. 作为微服务的Spring应用程序,您需要在容器或PCF / Bluemix / AWS / Azure / GCP等上的其他服务,而Apache Spark具有自己的世界,需要PCF上没有的计算能力。

  2. Spark不是数据库,因此它不能“存储数据”。它处理数据并将其临时存储在内存中,但这不是持久存储。

  3. 一旦提交Spark作业,您将不得不等待两次之间的结果,而您无法获取数据。

如何将Spring的Spark应用程序用作Rest API调用:

Apache Livy是一项服务,可通过REST接口轻松与Spark集群进行交互。它可以通过简单的REST接口或RPC客户端库轻松提交Spark作业或Spark代码片段,同步或异步结果检索以及Spark上下文管理。

相关问题