【问题标题】:Deploy Apache Spark application from another application in Java, best practice从另一个 Java 应用程序部署 Apache Spark 应用程序,最佳实践
【发布时间】:2015-03-26 15:23:43
【问题描述】:

我是 Spark 的新用户。我有一个 Web 服务,它允许用户通过从数据库读取并将结果推回数据库来请求服务器执行复杂的数据分析。我已将这些分析转移到各种 Spark 应用程序中。目前我使用 spark-submit 来部署这些应用程序。

但是,我很好奇,当我的 Web 服务器(用 Java 编写)接收到用户请求时,启动相应 Spark 应用程序的“最佳实践”方式是什么? Spark 的文档似乎是使用“spark-submit”,但我宁愿不将命令输出到终端来执行此操作。我看到了一个替代方案,Spark-JobServer,它提供了一个 RESTful 接口来执行此操作,但我的 Spark 应用程序是用 Java 或 R 编写的,这似乎与 Spark-JobServer 的接口不太好。

是否有另一种最佳实践从 Web 服务器(Java 中)启动 spark 应用程序,并等待作业成功或失败的状态结果?

任何关于其他人正在做什么来实现这一点的想法都会非常有帮助!谢谢!

【问题讨论】:

    标签: java web-services deployment apache-spark spark-jobserver


    【解决方案1】:

    我也有类似的要求。这是我所做的:

    1. 为了提交应用,我使用了隐藏的 Spark REST 提交 API:http://arturmkrtchyan.com/apache-spark-hidden-rest-api

    2. 使用相同的 API,您可以查询驱动程序的状态,也可以稍后终止您的工作

    3. 还有另一个隐藏的 UI Json API:http://[master-node]:[master-ui-port]/json/,它以 JSON 格式公开主 UI 上的所有可用信息。

    使用“提交 API”我提交驱动程序并使用“主 UI API”我等到我的驱动程序和应用程序状态正在运行

    【讨论】:

      【解决方案2】:

      Web 服务器也可以充当 Spark 驱动程序。所以它会有一个SparkContext 实例并包含使用RDD 的代码。

      这样做的好处是 Spark 执行器的寿命很长。您不必一直启动/停止它们,从而节省时间。您可以在操作之间缓存 RDD。

      一个缺点是,由于执行器一直在运行,它们占用了集群中其他进程可能使用的内存。另一个问题是您不能拥有多个 Web 服务器实例,因为您不能拥有多个 SparkContext 到同一个 Spark 应用程序。

      【讨论】:

        【解决方案3】:

        我们正在使用 Spark Job-server,它可以与 Java 一起正常工作,也只需构建 Java 代码的 jar 并用 Scala 包装它以与 Spark Job-Server 一起使用。

        【讨论】:

          猜你喜欢
          • 2015-08-05
          • 2013-06-03
          • 2011-05-19
          • 1970-01-01
          • 1970-01-01
          • 2011-02-18
          • 1970-01-01
          • 2014-10-12
          • 1970-01-01
          相关资源
          最近更新 更多