【问题标题】:run spark as java web application将 spark 作为 java web 应用程序运行
【发布时间】:2017-02-23 03:10:17
【问题描述】:

我使用过 Spark ML,并且能够对我的业务问题进行合理准确的预测

数据并不庞大,我能够使用 stanford NLP 转换输入(基本上是一个 csv 文件)并在我的本地机器上运行朴素贝叶斯进行预测。

我想像一个简单的 java 主程序或一个简单的 MVC Web 应用程序一样运行这个预测服务

目前我使用 spark-submit 命令运行我的预测?相反,我可以从我的 servlet/控制器类创建 spark 上下文和数据帧吗?

我找不到有关此类情况的任何文档。

请就上述的可行性提出建议

【问题讨论】:

  • “我找不到关于这种情况的任何文档”。 boz spark 不适合以这种方式使用。
  • 您可以将预测输出存储在您的 MVC 应用程序数据库或 spark 表中,然后通过 thrift 服务器访问它

标签: apache-spark spark-dataframe apache-spark-mllib


【解决方案1】:

Spark 具有 REST api,可通过调用 spark master 主机名来提交作业。

提交申请:

curl -X POST http://spark-cluster-ip:6066/v1/submissions/create --header "Content-Type:application/json;charset=UTF-8" --data '{
  "action" : "CreateSubmissionRequest",
  "appArgs" : [ "myAppArgument1" ],
  "appResource" : "file:/myfilepath/spark-job-1.0.jar",
  "clientSparkVersion" : "1.5.0",
  "environmentVariables" : {
    "SPARK_ENV_LOADED" : "1"
  },
  "mainClass" : "com.mycompany.MyJob",
  "sparkProperties" : {
    "spark.jars" : "file:/myfilepath/spark-job-1.0.jar",
    "spark.driver.supervise" : "false",
    "spark.app.name" : "MyJob",
    "spark.eventLog.enabled": "true",
    "spark.submit.deployMode" : "cluster",
    "spark.master" : "spark://spark-cluster-ip:6066"
  }
}'

提交回复:

{
  "action" : "CreateSubmissionResponse",
  "message" : "Driver successfully submitted as driver-20151008145126-0000",
  "serverSparkVersion" : "1.5.0",
  "submissionId" : "driver-20151008145126-0000",
  "success" : true
}

获取已提交申请的状态

curl http://spark-cluster-ip:6066/v1/submissions/status/driver-20151008145126-0000

状态响应

{
  "action" : "SubmissionStatusResponse",
  "driverState" : "FINISHED",
  "serverSparkVersion" : "1.5.0",
  "submissionId" : "driver-20151008145126-0000",
  "success" : true,
  "workerHostPort" : "192.168.3.153:46894",
  "workerId" : "worker-20151007093409-192.168.3.153-46894"
}

现在在您提交的 spark 应用程序中应该执行所有操作,save output to any datasource and access the data via thrift server 因为没有太多数据要传输(如果您想在 MVC 应用程序数据库和 Hadoop 集群之间传输数据,可以考虑使用 sqoop) .

学分:link1link2

编辑:(根据评论中的问题) 构建具有必要依赖项的 spark 应用程序 jar 并在本地模式下运行作业。以读取 CSV 并使用 MLib 的方式编写 jar,然后将预测输出存储在某个数据源中,以便从 Web 应用程序访问它。

【讨论】:

  • 感谢您的详细回复。我不打算拥有一个 hadoop 集群或通过 RESTful 服务提交作业。我一直在寻找的(如果可行的话)是像使用任何其他简单 API 一样使用 spark mlib API,以便它们在同一个应用程序 jvm 中运行,而不是作为外部的单独进程。
  • 在这种情况下,您可能会想到 spark 本地模式,它将作为标准 java jar 在单个 JVM 中运行。
  • 谢谢 Srinivas - 我会试试看的。
猜你喜欢
  • 2010-11-17
  • 1970-01-01
  • 2010-11-27
  • 1970-01-01
  • 2022-01-08
  • 2016-08-03
  • 1970-01-01
  • 2013-10-22
  • 1970-01-01
相关资源
最近更新 更多