我想使用livy Programmatic API提交批处理jar Spark作业,就像使用其他API批处理一样,我有json数据
{
"className": "org.apache.spark.examples.SparkPi",
"queue": "default",
"name": "SparkPi by Livy",
"proxyUser": "hadoop",
"executorMemory": "5g",
"args": [2000],
"file": "hdfs://host:port/resources/spark-examples_2.11-2.1.1.jar"
}
但我找不到任何关于此的文件
您可以使用Livy通过rest API提交spark作业。请按照以下步骤操作,
首先构建spark应用程序并创建程序集jar并将应用程序jar上载到hadoop集群的集群存储(HDFS)上。
使用curl(用于测试)提交作业并使用http client api实现。
使用scala中的http客户端提交spark作业的示例代码
import org.apache.http.client.methods.{CloseableHttpResponse, HttpGet,
HttpPost, HttpPut}
import org.apache.http.entity.StringEntity
import org.apache.http.impl.client.{CloseableHttpClient, HttpClientBuilder}
import org.apache.http.util.EntityUtils
import scala.util.parsing.json.{JSON, JSONObject}
def submitJob(className: String, jarPath:String, extraArgs: List[String]) : JSONObject = {
val jobSubmitRequest = new HttpPost(s"${clusterConfig.livyserver}/batches")
val data = Map(
"className"-> className,
"file" -> jarPath,
"driverMemory" -> "2g",
"name" -> "LivyTest",
"proxyUser" -> "hadoop")
if(extraArgs != null && !extraArgs.isEmpty) {
data + ( "args" -> extraArgs)
}
val json = new JSONObject(data)
println(json.toString())
val params = new StringEntity(json.toString(),"UTF-8")
params.setContentType("application/json")
jobSubmitRequest.addHeader("Content-Type", "application/json")
jobSubmitRequest.addHeader("Accept", "/")
jobSubmitRequest.setEntity(params)
val client: CloseableHttpClient = HttpClientBuilder.create().build()
val response: CloseableHttpResponse = client.execute(jobSubmitRequest)
HttpReqUtil.parseHttpResponse(response)._2
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。