有没有办法让sparkjava拥有类似于dropwizard的restful java API



我的团队正在研究将sparkjava用于RESTful Web服务,但我对反序列化请求的选项不满意。

似乎有两种选择:

  1. 使用其默认的反序列化,它只提供嵌套的映射结构,这与使用Java 等OO语言的目的背道而驰

  2. 将每个路径定义封装在一堆样板文件中,以便反序列化/序列化请求和响应对象并调用处理程序方法。

我写了一些东西来减少样板的数量,所以你可以写这样的东西:

public void Routes() {
post("/happy/birthday", (request, response) -> {
return callJson(getHandler("birthday"), request, response);
});
}

这还不错,但它需要反射来查找生日方法,因此没有编译时验证生日处理程序方法的存在。但感觉应该有更好的方法。

可能有误解,但Spark Java只是Java,因此您可以使用任何Java序列化库。我把Gson和Spark一起用过。

Gson gson = new Gson();
post("/employee", (request, response) -> {
ValidateNewEmployeeCommand command = new ValidateNewEmployeeCommand();
Employee emp = gson.fromJson(request.body(), Employee.class);
return command.validateEmployee(emp);
}, gson::toJson);

Livy(Apache许可证)是一项服务,使远程应用程序能够通过REST API轻松地与Spark集群交互。它可以通过简单的REST接口或RPC客户端库轻松提交Spark作业或Spark代码片段、同步或异步结果检索以及SparkContext管理。Livy还简化了Spark和应用程序服务器之间的交互,简化了交互式web/移动应用程序所需的体系结构。

有了Livy,您还可以:

由多个客户端为多个Spark作业使用长时间运行的SparkContexts

同时管理多个SparkContext,并在集群(YARN/Mesos)上运行它们,而不是在Livy服务器上运行,以实现良好的容错和并发

以预编译的jar、代码片段或通过Java/Scala客户端API 提交作业

通过安全认证通信(正在进行的工作)确保安全

要使用Livy,必须在服务器上安装Spark(1.4或更高版本;Scala 2.10版本)。要开始,请从这里下载/安装软件包,然后只需执行以下操作:

https://blog.cloudera.com/blog/2016/07/livy-the-open-source-rest-service-for-apache-spark-joins-cloudera-labs/

看起来没有办法实现我的目标,但我们已经制定了一些实用程序,可以为我们完成任务,并允许我们以Dropwizard中定义的方式定义路由。我们会看看是否可以开源。

最新更新