【问题标题】:java how to run spark app within apache serverjava如何在apache服务器中运行spark应用程序
【发布时间】:2016-06-09 16:33:46
【问题描述】:

我有一个 Spark MVC 应用程序,非常简单。

根据spark documentation,这应该足以运行应用程序:

public class SparkServer {
    public static void main(String args[]) {
        Spark.staticFileLocation("src/main/webapp");
        System.out
                .println("bla bla bla");
        RService rService = new SparqlRService();
        new RController(rService);
    }
}

我将该类放在我的项目中的一个包中,并在 Apache Tomcat 服务器上运行 Web 应用程序(动态 Web 应用程序)。

运行 Apache Tomcat 时没有出现 print 语句,说明这个类没有被调用。 我知道这是有道理的。这就是我要问的原因。请问如何让 Apache Tomcat 运行我的 spark 应用程序?

更新

@mlk answer之后,我做了以下事情:

public class SparkServer implements SparkApplication {

    @Override
    public void init() {
        Spark.staticFileLocation("src/main/webapp");
        System.out
                .println("bla bla lba");
        RService rService = new SparqlRService();
        new RController(rService);
    }
}

在我的 web.xml 中我做了:

    <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    id="WebApp_ID" version="3.1">
    <display-name>SRecommender</display-name>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>
    <filter>
        <filter-name>SparkFilter</filter-name>
        <filter-class>spark.servlet.SparkFilter</filter-class>
        <init-param>
            <param-name>
    applicationClass</param-name>
            <param-value>com.srecommender.SparkServer</param-value>
        </init-param>
    </filter>

    <filter-mapping>
        <filter-name>SparkFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

</web-app>

我的 SparkServer 在包中的位置: com.recommender 存在于源文件夹中:src/main/java

我运行 apache tomcat,但是当我从 spark 调用任何路径时,它仍然返回 404。

HITE 我可以从 main 方法运行 spark 并调用我的页面,它们正在工作。所以我配置 spark 在 apache tomcat 中运行的方式存在问题

更新 2

这是如何设置视图的路径

public RecommendationController(RecommendationService service) {
        get("/", (request, response) -> {

            Map<String, Object> model = new HashMap<>();
            model.put("data", "forza ROMA");
            model.put("data2", "It's Rome, It's home");

            return View("src/main/webapp/template/index.html", model);
        });

【问题讨论】:

标签: java apache tomcat spark-java


【解决方案1】:

Spark 带有一个内置容器,因此您不需要 tomcat 或 jetty。如果你想部署到一个完整的容器,那么you can by creating a web.xml file 并实现spark.servlet.SparkApplication

编辑:您的 Web.xml 中缺少 applicationClass 属性。

【讨论】:

  • 谢谢,这就是我要找的东西,我已经有了 web.xml,你提到的页面列出了一个过滤器,但是,你说,火花应用程序,你能告诉我是谁我的web.xml 有吗?我真的很感激。
  • 我已经更新了我的答案,以向您展示我在您的赞赏回答后所做的尝试,您可以看看吗?
  • 您的 Web 中缺少 applicationClass。 xml
  • 如果你的意思是我必须这样做com.srecommender.SparkServer ,那么我也已经尝试过了,但还是不行。
  • 请为您尝试过的内容发布完整的 web.xml。发布的内容不包括过滤器上的 applicationClass 参数。
【解决方案2】:

WebApp 不执行 static void main() 方法,它们根据已部署的 WAR 文件中的 web.xml 进行引导。

您有运行 webapps 的经验吗?你需要一个像 Tomcat 或 Jetty 这样的容器。 Apache 服务器仅用于服务 HTTP,本身并不是应用程序容器。

【讨论】:

  • Spark 包含一个内置的 jetty,因此您可以使用 main 方法启动它。
  • OP 询问的是“动态网络应用”,因此这里的假设是需要的不仅仅是 Spark。
  • @Marco 是的 Jersey 代码将被打包到 WAR 中并部署到应用程序容器(更具体地说是 servlet 容器)
  • @Brad 谢谢,让我们先试试答案或 MLK,它应该像 spark 的原生容器。那么如果不和我一起工作,我会试试球衣
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-30
  • 2016-09-07
  • 1970-01-01
  • 2014-05-23
  • 1970-01-01
相关资源
最近更新 更多