Как отправить пакетные задания Spark с помощью livy Programmatic API - PullRequest
0 голосов
/ 21 ноября 2018

Я хочу отправить пакетные jar-задания Spark с использованием livy Programmatic API, как и при использовании остальных пакетов 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"
}

, но я не могу найти какой-либо документ по этому поводу, возможно ли это?как?

1 Ответ

0 голосов
/ 29 ноября 2018

Да, вы можете отправлять спарк-задания через rest API, используя Livy.Выполните следующие шаги:

  • Сначала соберите приложение spark, создайте Jar-файл сборки и загрузите JAR-приложение в хранилище кластера (HDFS) кластера hadoop.
  • Отправьте задание, используялибо сверните (для тестирования), и внедрите с помощью http-клиента api.

Пример кода для отправки искрового задания с использованием http-клиента в scala

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
}

Пожалуйста, обратитесь к сообщению для получения более подробной информации https://www.linkedin.com/pulse/submitting-spark-jobs-remote-cluster-via-livy-rest-api-ramasamy/

Пример проекта по следующей ссылке https://github.com/ravikramesh/spark-rest-service

...