java—通过rest端点处理来自spark应用程序的输入请求

zbdgwd5y  于 2021-05-29  发布在  Spark
关注(0)|答案(0)|浏览(192)

我有一个场景,需要在20节点集群的spark作业中处理来自用户的输入请求。spark应用程序使用深度学习,并对存储在hdfs上的用户数据进行一些预测。其思想是提供一个类似restwebservice的环境,用户可以向其中发送请求,并且应该在yarn上使用spark以分布式模式处理请求。以下是问题:
当我建造 jar 具有依赖关系的文件,其大小超过1gb。深度cnn模型没有嵌入到 jar 文件。
通过运行应用程序 spark-submit 对于每一个入职申请似乎不切实际,因为: spark-submit 有自己的开销。资源分配、jvm应用程序容器分配等都需要时间
应用程序在启动时加载深度cnn训练的模型,一个模型的大小约为700mb,而且加载也需要时间
我的想法是一经使用就提交申请 spark-submit 作为一个无限运行的作业,将spark上下文和模型保存在内存中,并公开一个rest端点,用户可以向其发送请求。收到请求后,从正在运行的作业中触发Map操作,获取结果,并将其返回给中的用户 Json 格式。这样,他们将立即处理没有任何延误。这可能吗?
我研究了许多文章,也研究了stackoverflow问题,例如使用spark处理请求、通过web应用程序启动spark应用程序的最佳实践?、将spark作为java web应用程序运行、如何在spark submit命令(spark)中部署war文件,以及创建独立的按需apache spark web服务,这些都不符合我描述的场景。
从文章和stackoverflow问题中,我了解到可以使用spark rest api和apache livy来提交spark作业,但是在这两种情况下,每个请求都会提交一个spark作业,这与我上面描述的问题相同(1+gb jar文件大小加上starup上的加载模型)。另外,在多个并发的incomming请求中会发生什么?我说得对吗?
我读到uber使用spark进行路由计算(article,article,article),但它的源代码是封闭的,我不知道他们是如何在每次输入用户请求时动态地进行路由计算的。
简而言之,是否可以使用一个轻量级框架(比如sparkjava)在spark作业中嵌入rest微服务?spark流在这种情况下也不适用,因为没有流数据源。
我已经找了很长一段时间,我从来没有找到一个切实可行的解决办法。如果我对spark rest api和livy的理解有误,可以纠正一下吗?如果我的想法是错误的,你能告诉我还有什么方法可以完成这项工作吗?任何帮助或建议都将受到高度赞赏。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题