运行spark作为java web应用程序

时间:2016-10-13 20:29:15

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

我使用了Spark ML,并且能够在预测业务问题方面获得合理的准确性

数据不是很大,我能够使用stanford NLP转换输入(基本上是一个csv文件)并在本地机器上运行Naive Bayes进行预测。

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

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

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

请就上述

的可行性提出建议

1 个答案:

答案 0 :(得分:5)

Spark有REST apis通过调用spark master hostname来提交作业。

提交申请

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 app db之间传输数据,你可以想到sqoop和Hadoop集群)。

点数:link1link2

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