Livy-Upload JAR в пути к классам драйвера

Я не могу создать активный интерактивный сеанс с зависимым файлом JAR, требуемым в пути к классу драйвера, с помощью следующей команды:

curl -H "Content-Type: application/json" -X POST -d '{"kind":"pyspark","conf":{"spark.driver.extraClassPath":"/data/XXX-0.0.1-SNAPSHOT.jar"}}' -i http://<LIVY_SERVER_IP:PORT>/sessions

Файл JAR здесь присутствует в пути локального драйвера. Также пытался использовать путь HDFS следующим образом hdfs://<NM_IP>:<NM_Port>/data/XXX-0.0.1-SNAPSHOT.jar

Ниже приведены журналы живого сервера при попытке создать интерактивный сеанс.

19/08/12 17:26:56 INFO sessions.InteractiveSessionManager: Registering new session 0
19/08/12 17:26:58 INFO utils.LineBufferedStream: Exception in thread "main" java.lang.NullPointerException
19/08/12 17:26:58 INFO utils.LineBufferedStream:        at org.apache.livy.rsc.driver.JobWrapper.cancel(JobWrapper.java:90)
19/08/12 17:26:58 INFO utils.LineBufferedStream:        at org.apache.livy.rsc.driver.RSCDriver.shutdown(RSCDriver.java:127)
19/08/12 17:26:58 INFO utils.LineBufferedStream:        at org.apache.livy.rsc.driver.RSCDriver.run(RSCDriver.java:356)
19/08/12 17:26:58 INFO utils.LineBufferedStream:        at org.apache.livy.rsc.driver.RSCDriverBootstrapper.main(RSCDriverBootstrapper.java:93)
19/08/12 17:26:58 INFO utils.LineBufferedStream:        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
19/08/12 17:26:58 INFO utils.LineBufferedStream:        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
19/08/12 17:26:58 INFO utils.LineBufferedStream:        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
19/08/12 17:26:58 INFO utils.LineBufferedStream:        at java.lang.reflect.Method.invoke(Method.java:498)
19/08/12 17:26:58 INFO utils.LineBufferedStream:        at org.apache.spark.deploy.JavaMainApplication.start(SparkApplication.scala:52)
19/08/12 17:26:58 INFO utils.LineBufferedStream:        at org.apache.spark.deploy.SparkSubmit.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:849)
19/08/12 17:26:58 INFO utils.LineBufferedStream:        at org.apache.spark.deploy.SparkSubmit.doRunMain$1(SparkSubmit.scala:167)
19/08/12 17:26:58 INFO utils.LineBufferedStream:        at org.apache.spark.deploy.SparkSubmit.submit(SparkSubmit.scala:195)
19/08/12 17:26:58 INFO utils.LineBufferedStream:        at org.apache.spark.deploy.SparkSubmit.doSubmit(SparkSubmit.scala:86)
19/08/12 17:26:58 INFO utils.LineBufferedStream:        at org.apache.spark.deploy.SparkSubmit$$anon$2.doSubmit(SparkSubmit.scala:924)
19/08/12 17:26:58 INFO utils.LineBufferedStream:        at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:933)
19/08/12 17:26:58 INFO utils.LineBufferedStream:        at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

Однако, когда тот же JAR используется при выполнении задания Python с пакетным сеансом, он успешно завершается. Ниже упоминается команда:

curl -H "Content-Type: application/json" -X POST --data '{"file": "/data/test.py", "conf": {"spark.driver.extraClassPath":"/data/XXX-0.0.1-SNAPSHOT.jar"}}'  http://<LIVY_SERVER_IP:PORT>/batches

Файл Python /data/test.py присутствует на пути HDFS.

Я попытался добавить путь к каталогу в белый список, изменив файл livy.conf со следующими изменениями livy.file.local-dir-whitelist = /data/


person IshitaV    schedule 12.08.2019    source источник


Ответы (1)


Сессия Livy Interactive состоит из двух шагов. Файлы должны быть в HDFS при создании сеанса.

  1. Создать интерактивный сеанс
  2. Используйте идентификатор сеанса для выполнения инструкций.

    curl -X POST --data '{"kind": "pyspark", "pyFiles" : ["/some hdfs location/splitter.py"]}' -H "Content-Type: application/json" -H "X -Requested-By: root"http://localhost:8999/sessions

См.:: https://livy.apache.org/examples/

https://community.hortonworks.com/questions/191738/invoke-livy-with-pyfiles-attribute.html

person dassum    schedule 12.08.2019
comment
Пока он работает для pyFiles, меня беспокоит spark.driver.extraClasspath, который должен включать в себя некоторый JAR. Как предоставить этот JAR и каким будет место при создании сеанса? Пробовал использовать местоположение HDFS, а также локальное местоположение на машине с драйвером. - person IshitaV; 13.08.2019
comment
попробуйте с параметром jar curl -X POST --data '{вид: pyspark, pyFiles: [/some hdfs location/splitter.py],'jars':['file:///path/to/foo.jar'] }' -H Content-Type: application/json -H X-Requested-By: root localhost:8999/sessions - person dassum; 13.08.2019
comment
Пробовал следующую команду: curl -H "Content-Type: application/json" -X POST -d '{"kind":"pyspark","jars":["file:///XXX.jar"]}}' -i http://<IP>:<PORT>/sessions, и все равно не повезло. Кроме того, это интерактивный сеанс, так что нам действительно нужен аргумент pyFiles? - person IshitaV; 14.08.2019
comment
Я хочу запустить задание Spark, используя интерактивный сеанс Livy вместо пакетного. Возможно ли это сделать? У меня есть JAR в локальной системе и используется livy в автономном режиме. - person Abhishek Sengupta; 15.09.2020