Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spark REST API理解困难,目标是从网页发送RESTful消息_Rest_Apache Spark - Fatal编程技术网

Spark REST API理解困难,目标是从网页发送RESTful消息

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

对于一个项目,我想通过网页运行Spark。这里的目标是动态提交提交请求和状态更新。作为灵感,我使用了以下网站链接:当要求 在提交以下spark请求后,我将发送一个用于检查spark提交的REST请求:

Spark作业提交的请求代码如下:

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://...]