运行 spark 作为 java 网络应用程序
run spark as java web application
我使用过 Spark ML 并且能够在预测我的业务问题时获得合理的准确性
数据不大,我能够使用斯坦福 NLP 和 运行 朴素贝叶斯转换输入(基本上是一个 csv 文件)以在我的本地机器中进行预测。
我想 运行 这个预测服务就像一个简单的 java 主程序或一个简单的 MVC 网络应用程序
目前我 运行 我的预测使用 spark-submit 命令?相反,我可以从我的 servlet/控制器创建 spark 上下文和数据帧 class 吗?
我找不到关于此类场景的任何文档。
请就上述可行性提出建议
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 应用程序数据库之间传输数据,您可以考虑 sqoop和 Hadoop 集群)。
编辑:(根据评论中的问题)
构建具有必要依赖项的 spark 应用程序 jar 和 运行 本地模式下的作业。以读取 CSV 的方式编写 jar 并使用 MLib,然后将预测输出存储在某个数据源中以从 Web 应用程序访问它。
我使用过 Spark ML 并且能够在预测我的业务问题时获得合理的准确性
数据不大,我能够使用斯坦福 NLP 和 运行 朴素贝叶斯转换输入(基本上是一个 csv 文件)以在我的本地机器中进行预测。
我想 运行 这个预测服务就像一个简单的 java 主程序或一个简单的 MVC 网络应用程序
目前我 运行 我的预测使用 spark-submit 命令?相反,我可以从我的 servlet/控制器创建 spark 上下文和数据帧 class 吗?
我找不到关于此类场景的任何文档。
请就上述可行性提出建议
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 应用程序数据库之间传输数据,您可以考虑 sqoop和 Hadoop 集群)。
编辑:(根据评论中的问题) 构建具有必要依赖项的 spark 应用程序 jar 和 运行 本地模式下的作业。以读取 CSV 的方式编写 jar 并使用 MLib,然后将预测输出存储在某个数据源中以从 Web 应用程序访问它。