Отправка искровых заданий через livy с помощью curl

Я отправляю задания искры в сеансе livy (0.6.0) через Curl

Задания представляют собой большой файл jar, который точно так же расширяет интерфейс задания:

На самом деле при запуске этого кода с помощью этой команды curl:

curl -X POST -d '{"kind": "spark","files":["/config.json"],"jars":["/myjar.jar"],"driverMemory":"512M","executorMemory":"512M"}' -H "Content-Type: application/json" localhost:8998/sessions/

Когда дело доходит до кода, он точно такой же, как ответ, показанный выше:

package com.mycompany.test
import org.apache.livy.{Job, JobContext}
import org.apache.spark._
import org.apache.livy.scalaapi._

object Test extends Job[Boolean]{
  override def call(jc: JobContext): Boolean = {
  val sc = jc.sc
  sc.getConf.getAll.foreach(println)
  return true
}

Что касается ошибки, это исключение java Nullpointer, как показано ниже.

Exception in thread "main" java.lang.NullPointerException
    at org.apache.livy.rsc.driver.JobWrapper.cancel(JobWrapper.java:90)
    at org.apache.livy.rsc.driver.RSCDriver.shutdown(RSCDriver.java:127)
    at org.apache.livy.rsc.driver.RSCDriver.run(RSCDriver.java:356)
    at org.apache.livy.rsc.driver.RSCDriverBootstrapper.main(RSCDriverBootstrapper.java:93)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.spark.deploy.JavaMainApplication.start(SparkApplication.scala:52)
    at org.apache.spark.deploy.SparkSubmit.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:849)
    at org.apache.spark.deploy.SparkSubmit.doRunMain$1(SparkSubmit.scala:167)
    at org.apache.spark.deploy.SparkSubmit.submit(SparkSubmit.scala:195)
    at org.apache.spark.deploy.SparkSubmit.doSubmit(SparkSubmit.scala:86)
    at org.apache.spark.deploy.SparkSubmit$$anon$2.doSubmit(SparkSubmit.scala:924)
    at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:933)
    at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

поскольку выход исключен, чтобы начать выполнение задания в банке


person Ahmed Adnane A'mil    schedule 02.09.2019    source источник


Ответы (1)


Я использовал живой API REST, и в связи с этим есть 2 подхода к отправке искрового задания. Пожалуйста, обратитесь к остальным API документам, вы получите полное представление о жизни остальные запросы.:

1. Пакет (/batches):
Вы отправляете запрос, вы получаете идентификатор задания. Основываясь на идентификаторе задания, вы запрашиваете статус задания искры. Здесь у вас есть возможность запустить uber jar, а также файл кода, но я никогда не использовал последний

<сильный>2. Сессия (/sessions и /sessions/{sessionId}/statements):
Вы отправляете искровое задание в виде кода, создавать uber jar не нужно. Здесь вы сначала создаете сеанс и в этом сеансе выполняете оператор/ы (фактический код)

Для обоих подходов, если вы проверите документацию, в ней есть хорошее объяснение соответствующих запросов на отдых и тело/параметры запроса.

Примеры/образцы: здесь, здесь

Исправление в вашем коде:

Пакетно

curl \
  -X POST \
  -d '{
    "kind": "spark",
    "files": [
      "<use-absolute-path>"
    ],
    "file": "absolute-path-to-your-application-jar",
    "className": "fully-qualified-spark-class-name",
    "driverMemory": "512M",
    "executorMemory": "512M",
    "conf": {<any-other-configs-as-key-val>}
  }' \
  -H "Content-Type: application/json" \
  localhost:8998/batches/

Сессия и заявление

// Create a session
curl \
  -X POST \
  -d '{
    "kind": "spark",
    "files": [
      "<use-absolute-path>"
    ],
    "driverMemory": "512M",
    "executorMemory": "512M",
    "conf": {<any-other-configs-as-key-val>}
  }' \
  -H "Content-Type: application/json" \
  localhost:8998/sessions/

// Run code/statement in session created above
curl \
  -X POST \
  -d '{
    "kind": "spark",
    "code": "spark-code"
  }' \
  -H "Content-Type: application/json" \
  localhost:8998/sessions/{sessionId}/statements
person kode    schedule 02.09.2019
comment
как насчет отправки задания, как в примере выше, я не могу каждый раз отправлять код через curl, поэтому у меня есть банка, вопрос заключался в том, как заставить эту банку работать - person Ahmed Adnane A'mil; 02.09.2019
comment
@AhmedAdnaneA'mil: я думаю, что это довольно ясно из подходов, которые я упомянул. Если вы хотите пойти по пути uber jar, обратитесь к пакетному подходу, и для него также приведен пример curl. - person kode; 02.09.2019
comment
ваш комментарий был довольно информативным, но он не отвечает на заданный вопрос, проблема заключается даже в пакетной команде, проблема, я думаю, связана с файлом jar, любая идея о том, как я должен компилировать свою банку / писать свой код - person Ahmed Adnane A'mil; 03.09.2019
comment
Могу ли я использовать путь s3 к файлу JAR? - person yegeniy; 19.02.2020
comment
@yegeniy да, вы можете использовать путь S3 к файлу JAR. - person kode; 21.02.2020
comment
Спасибо @Kode. Оказалось, что моя проблема была на самом деле с [LIVY-636]. Мне нужно было исключить саму scala из сборки jar. - person yegeniy; 21.02.2020