我使用的是Datastax Enterprise 4.8.3。 我试图实现一个基于Quartz的应用程序来远程提交Spark作业。 在我的研究过程中,我偶然发现了以下链接:
为了测试理论,我尝试在我的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"
}
}'
答案 0 :(得分:3)
检查您是否已启动Spark主人和工作人员(使用start-all.sh
)
检查日志文件中是否有类似
INFO rest.StandaloneRestServer:已启动REST服务器,用于在端口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生效。