首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以使用spark集群来代替java rest应用程序吗?

可以使用spark集群来代替java rest应用程序吗?
EN

Stack Overflow用户
提问于 2019-02-01 02:32:57
回答 1查看 75关注 0票数 0

我们有一个应用程序,它构建在java/jax-rs上,在一个端口上侦听rest调用,我们使用tomcat来部署我们的应用程序,api侦听这个post调用,在一些名义上的过滤之后将数据转储到mysql中,然后一个定时器(java.util.Timer)线程每秒查询数据并处理它,并将其存储到另一个数据库中。现在,由于传入数据的频率/数据量非常大,mysql有时会阻塞。我们正在考虑采用主主复制(因为加载是在插入时进行的,所以主从复制不会有任何帮助),这可能会工作一段时间,但运行的算法也非常占用cpu。

因此,我们正在考虑一种永久的替代方案,它将spark引入到场景中,我们已经有了一个正在运行的hotonworks,它正在运行hadoop和hbase。

所以我想知道,如果我们有一个spark集群(比如在GCP上运行),并且可以设置spark这样一种方式,它将侦听相同的端口(我们不想在客户端产生任何影响),而不是在tomcat上运行java应用程序,spark将在1秒的间隔内运行小批处理作业,并完成其余过程。我知道spark能够与kafka、jdbc或从文件等几个spout连接。但它能取代rest api吗??

谢谢

EN

回答 1

Stack Overflow用户

发布于 2019-02-01 04:21:47

正如您可能知道的那样,Spark有自己的REST端点( Spark -jobserver),它提供了使用HTTP请求触发Spark作业并检索结果的能力。

但是,由于spark-j观察者的API级别较低,我认为这不是完全用它替换您的应用程序的最佳决定。

使用您自己的端点和特定于域的REST抽象,您将获得更好的结果。而不是发出低级别的post请求:

代码语言:javascript
复制
POST/jars/appName
POST/context/appCtx
POST/data/jobParams
POST/jobs/myJob

您仍将发出特定于域的请求:

代码语言:javascript
复制
POST/add-user 
{
     email: 123@gmail.com
     name: Alex
}

在您的应用程序中,您只需启动您的小批量spark作业(例如在SparkLauncher的帮助下)。

因此您的代码可能如下所示(为简单起见,我将使用spring-mvc ):

代码语言:javascript
复制
@RequestMapping(value = "/add-user", method = RequestMethod.POST)
public String addUser(@RequestBody User user) {
    new SparkLauncher()
              .setAppResource(<path to jar>)
              .setMaster("yarn-cluster") 
              .setDeployMode("client")
              .setVerbose(true)
              .setMainClass("com.test.Main")               
              .startApplication();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54467121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档