Apache spark 为什么Livy或spark jobserver不是一个简单的web框架?
我正在ApacheSpark之上构建一个RESTful API。使用Apache spark 为什么Livy或spark jobserver不是一个简单的web框架?,apache-spark,spark-jobserver,livy,Apache Spark,Spark Jobserver,Livy,我正在ApacheSpark之上构建一个RESTful API。使用spark submit提供以下Python脚本似乎效果不错: import cherrypy from pyspark.sql import SparkSession spark = SparkSession.builder.appName('myApp').getOrCreate() sc = spark.sparkContext class doStuff(object): @cherrypy.expose
spark submit
提供以下Python脚本似乎效果不错:
import cherrypy
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName('myApp').getOrCreate()
sc = spark.sparkContext
class doStuff(object):
@cherrypy.expose
def compute(self, user_input):
# do something spark-y with the user input
return user_output
cherrypy.quickstart(doStuff())
但在谷歌上搜索,我看到了和。我阅读了这些项目的文档和一些教程,但我仍然不完全理解Livy或spark jobserver相对于使用CherryPy或Flask或任何其他web框架的简单脚本的优势。它是关于可伸缩性的吗?上下文管理?我错过了什么?如果我想要的是一个用户不多的简单RESTful API,那么Livy或spark jobserver值得麻烦吗?如果是,原因是什么?如果使用
spark submit
,则必须手动将JAR文件上载到集群并运行命令。跑步前必须做好一切准备
若您使用Livy或spark jobserver,那个么您可以通过编程上传文件并运行作业。您可以添加其他应用程序,这些应用程序将连接到同一集群,并在下一个作业中上载jar
此外,Livy和Spark JobServer允许您在交互模式下使用Spark,这在Spark submit中很难做到;) 我不会特别评论使用Livy或spark jobserver,但至少有三个原因可以避免在应用程序中直接嵌入spark上下文:
- 安全性,主要关注于减少集群对外的暴露。若集群配置不正确,则获得应用程序控制权的攻击者可以在访问数据和在集群上执行任意代码之间进行任何操作
- 稳定。Spark是一个复杂的框架,有许多因素会影响其长期性能和稳定性。解耦Spark上下文和应用程序使您能够优雅地处理Spark问题,而不会让应用程序完全停机
- 反应能力。面向用户的Spark API大部分(仅PySpark)是同步的。使用外部服务基本上解决了这个问题