Spark REST API理解困难,目标是从网页发送RESTful消息
对于一个项目,我想通过网页运行Spark。这里的目标是动态提交提交请求和状态更新。作为灵感,我使用了以下网站链接:当要求 在提交以下spark请求后,我将发送一个用于检查spark提交的REST请求: Spark作业提交的请求代码如下:Spark REST API理解困难,目标是从网页发送RESTful消息,rest,apache-spark,Rest,Apache Spark,对于一个项目,我想通过网页运行Spark。这里的目标是动态提交提交请求和状态更新。作为灵感,我使用了以下网站链接:当要求 在提交以下spark请求后,我将发送一个用于检查spark提交的REST请求: Spark作业提交的请求代码如下: curl -X POST http://sparkmasterIP:6066/v1/submissions/create --header "Content-Type:application/json;charset=UTF-8" --data '{ "ac
curl -X POST http://sparkmasterIP:6066/v1/submissions/create --header "Content-Type:application/json;charset=UTF-8" --data '{
"action" : "CreateSubmissionRequest",
"appArgs" : [ "/home/opc/TestApp.jar"],
"appResource" : "file:/home/opc/TestApp.jar",
"clientSparkVersion" : "1.6.0",
"environmentVariables" : {
"SPARK_ENV_LOADED" : "1"
},
"mainClass" : "com.Test",
"sparkProperties" : {
"spark.driver.supervise" : "false",
"spark.app.name" : "TestJob",
"spark.eventLog.enabled": "true",
"spark.submit.deployMode" : "cluster",
"spark.master" : "spark://sparkmasterIP:6066"
}
}'
Response:
{
"action" : "CreateSubmissionResponse",
"message" : "Driver successfully submitted as driver-20170302152313-0044",
"serverSparkVersion" : "1.6.0",
"submissionId" : "driver-20170302152313-0044",
"success" : true
}
在询问提交状态时遇到了一些困难。为了请求提交状态,我使用了上面响应代码中显示的submissionId。因此使用了以下命令:
curl http://masterIP:6066/v1/submissions/status/driver-20170302152313-0044
提交状态的响应包含以下错误:
"message" : "Exception from the cluster:\njava.io.FileNotFoundException: /home/opc/TestApp.jar denied)\n\tjava.io.FileInputStream.open0(Native Method)\n\tjava.io.FileInputStream.open(FileInputStream.java:195)\n\tjava.io.FileInputStream.<init>(FileInputStream.java:138)\n\torg.spark-project.guava.io.Files$FileByteSource.openStream(Files.java:124)\n\torg.spark-project.guava.io.Files$FileByteSource.openStream(Files.java:114)\n\torg.spark-project.guava.io.ByteSource.copyTo(ByteSource.java:202)\n\torg.spark-project.guava.io.Files.copy(Files.java:436)\n\torg.apache.spark.util.Utils$.org$apache$spark$util$Utils$$copyRecursive(Utils.scala:540)\n\torg.apache.spark.util.Utils$.copyFile(Utils.scala:511)\n\torg.apache.spark.util.Utils$.doFetchFile(Utils.scala:596)\n\torg.apache.spark.util.Utils$.fetchFile(Utils.scala:395)\n\torg.apache.spark.deploy.worker.DriverRunner.org$apache$spark$deploy$worker$DriverRunner$$downloadUserJar(DriverRunner.scala:150)\n\torg.apache.spark.deploy.worker.DriverRunner$$anon$1.run(DriverRunner.scala:79)",
“消息”:“集群异常:\njava.io.FileNotFoundException:/home/opc/TestApp.jar拒绝)\n\tjava.io.FileInputStream.open0(本机方法)\n\tjava.io.FileInputStream.open(FileInputStream.java:195)\n\tjava.io.FileInputStream.(FileInputStream.java:138)\n\torg.spark project.guava.io.Files$Files$FileByteSource.openStream(Files.java:124)\n\torg.spark project.guava.io.Files$FileByteSource.openStream(Files.java:114)\n\torg.spark project.guava.io.ByteSource.copyTo(ByteSource.java:202)\n\torg.spark project.guava.io.Files.copy(Files.java:436)\n\torg.apache.spark.util.Utils$.org$apache$spark$util$Utils$$copyRecursive(Utils.scala:540)\n\torg.apache.spark.Utils$.Utils$.copyFile(Utils.scala:511)\n\torg.apache.spark.util.Utils$.doFetchFile(Utils.scala:596)\n\torg.apache.spark.util.Utils$.fetchFile(Utils.scala:395)\n\torg.apache.spark.deploy.worker.DriverRunner.org$apache$spark$deploy$worker$DriverRunner$$downloadUserJar(DriverRunner.scala:150)\n\torg.apache.spark.deploy.worker.DriverRunner$$aner$anon$1.run(DriverRunner.scala:79)“,
我的问题是如何使用这样一个API,以获得提交状态。如果有另一个API可以获得正确的状态,那么我想简单介绍一下这个API是如何以RESTful方式工作的
谢谢如博客评论所述,还有一些评论也遇到了这个问题。下面我将尝试解释一些可能的原因 似乎未找到/拒绝您的
文件:/home/opc/TestApp.jar
。这可能是因为找不到目录(,)。这可能是因为它不在所有节点上,并且Spark submit处于群集模式。
正如应用程序jar的Spark文档中所述。应用程序jar:绑定jar的路径,包括应用程序和所有依赖项。URL必须在集群内全局可见,例如,所有节点上都存在的hdfs://路径或file://路径
要解决这个问题,我可以做的一个建议是使用spark submit
执行命令。有关spark submit
的更多信息,请访问,并从中找到一本书
谢谢。我尝试了几个步骤。我对该文件执行了chmod 777,但仍然出现了相同的错误。我还尝试将该文件放在所有群集节点上。将该文件放在hdfs上不起作用。关于您建议使用spark submit执行的建议,我尝试使用REST,因为我希望从网页动态执行该操作。如果它起作用,我将调用t他从网页上发出REST请求并启动作业。如果你想从网页上动态使用它,事情会有一点变化。一种方法是使用jobserver。当你安装作业服务器时,你可以从界面上运行restful命令。使用中列出的命令,你可以获得状态。谢谢。我将尝试spark jobser版本。为什么Spark hidden REST不适合这种情况(从web调用)?jobserver使用Spark hidden Rest,或者更确切地说是Restful消息。Spark submit也会吐出隐藏的Rest。因此,这两种方法都可以从web上动态完成。只是您问题中的web链接的作者提出的Spark hidden Rest有点黑客化,他试图形成Spark submit消息来卷曲消息。如果我编写java代码,用params调用spark submit,然后将此代码公开为Restful web服务,网页中的代码可以使用该服务,该怎么办?
spark-submit --status [submission ID] --master [spark://...]