如何通过REST API提交作业?

时间:2015-12-11 14:32:19

标签: rest apache-spark datastax-enterprise

我使用的是Datastax Enterprise 4.8.3。 我试图实现一个基于Quartz的应用程序来远程提交Spark作业。 在我的研究过程中,我偶然发现了以下链接:

  1. Apache Spark Hidden REST API
  2. Spark feature - Provide a stable application submission gateway in standalone cluster mode
  3. 为了测试理论,我尝试在我的2节点集群的主节点(IP:" spark-master-ip&#34 ;;直接在shell上)上执行以下代码片段(如链接中所提供)上面#1):

    go get

    但执行代码我得到一个html响应,其中包含以下文字:

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

2 个答案:

答案 0 :(得分:3)

  • 检查您是否已启动Spark主人和工作人员(使用start-all.sh

  • 检查日志文件中是否有类似

  • 的消息
  

INFO rest.StandaloneRestServer:已启动REST服务器,用于在端口6066上提交应用程序

  • 检查已启动的进程是否正在侦听端口6066(使用netstat

它应该是这样的:

root@x:~# netstat -apn | grep 11572 | grep LISTEN
tcp6       0      0 :::8080                 :::*                    LISTEN      11572/java      
tcp6       0      0 10.0.0.9:6066           :::*                    LISTEN      11572/java      
tcp6       0      0 10.0.0.9:7077           :::*                    LISTEN      11572/java      

然后替换" spark-master-ip"在脚本中使用您在netstat输出中看到的IP地址(示例显示" 10.0.0.9")。

答案 1 :(得分:0)

使用Spark 2.4.3,我们发现REST API在默认情况下处于禁用状态。禁用REST API后,对端口6066的调用将失败,并显示您所显示的错误。

我们发现必须通过将以下条目添加到您的POST 422 (Unprocessable Entity)文件中来启用REST API。

var data = {};
        data.area = 5555;
        data.calling_code = "+25";
        data.name = "Japan";
        data.population = 100000000;

        var url = "";
        var jsonUpdate = JSON.stringify(data);
        console.log(jsonUpdate);
        var updateReq = new XMLHttpRequest();
        updateReq.open("PUT", url + '/3', true);
        updateReq.setRequestHeader('Content-type', 'application/json; charset=utf-8');
        updateReq.onload = function () {
            var countries = JSON.parse(updateReq.responseText);
            if (updateReq.readyState == 4 && updateReq.status == "200") {
                console.table(countries);
            } else {
                console.error(countries);
            }
        }
        updateReq.send(jsonUpdate);

添加该条目后,我们将在计算机上重新启动Spark实例,并且REST API生效。