Получение ошибки при использовании Livy для отправки заданий Spark: пользователь не инициализировал контекст искры

Я новичок в Spark и следую этому документу, чтобы отправлять задания Spark через Livy https://docs.microsoft.com/en-us/azure/hdinsight/spark/apache-spark-livy-rest-interface

Вот моя команда:

curl -k --user "username:password!" -v -H "Content-Type: application/json" -X POST -d '{ "file":"/test4spark/test4sparkhaha.jar", "className":"helloworld4spark.test" }' "https://xxx.azurehdinsight.net/livy/batches" -H "X-Requested-By: username"

Файл test4sparkhaha.jar - это супер-простое приложение Java, он содержит только один класс и только основной метод, который выводит «хахаха», ничего больше ... Я экспортировал проект в Eclipse в Runnable Jar и попытался запустить его на моем искровом кластере с помощью Java -jar и Spark-submit. Оба работали хорошо. Затем я начал пытаться отправить задание через Livy, и это всегда терпело неудачу, я обнаружил следующие ошибки в журналах Yarn:

19/11/06 14:36:06 ОШИБКА ApplicationMaster: Неперехваченное исключение: java.lang.IllegalStateException: Пользователь не инициализировал контекст искры! на org.apache.spark.deploy.yarn.ApplicationMaster.runDriver (ApplicationMaster.scala: 510) на org.apache.spark.deploy.yarn.ApplicationMaster.org $ apache $ spark $ deploy $ yarn $ ApplicationMaster $$ runImpl (ApplicationMaster .scala: 345) в org.apache.spark.deploy.yarn.ApplicationMaster $$ anonfun $ run $ 2.apply $ mcV $ sp (ApplicationMaster.scala: 260) в org.apache.spark.deploy.yarn.ApplicationMaster $$ anonfun $ run $ 2.apply (ApplicationMaster.scala: 260) в org.apache.spark.deploy.yarn.ApplicationMaster $$ anonfun $ run $ 2.apply (ApplicationMaster.scala: 260) в org.apache.spark.deploy.yarn .ApplicationMaster $$ anon $ 5.run (ApplicationMaster.scala: 815) в java.security.AccessController.doPrivileged (собственный метод) в javax.security.auth.Subject.doAs (Subject.java:422) в org.apache.hadoop .security.UserGroupInformation.doAs (UserGroupInformation.java:1869) в org.apache.spark.deploy.yarn.ApplicationMaster.doAsUser (ApplicationMaster.scala: 814) в org.apache.spark.deploy.yarn.ApplicationMaster.run (ApplicationMaster .scala: 259) в org.apache.spark.deploy.yarn.ApplicationMaster $ .main (ApplicationMaster.scala: 839) в org.apache.spark.deploy.yarn.ApplicationMaster.main (ApplicationMaster.scala)

Вот команда Spark-submit, которую я пробовал:

spark-submit --class helloworld4spark.test test4sparkhaha.jar

Работает отлично ...

Не могли бы вы, ребята, помочь мне понять, почему он выдает ошибку, когда Spark-submit работает нормально?


person Chase    schedule 06.11.2019    source источник


Ответы (1)


Я предполагаю, что вы пытаетесь отправить локальный .jar файл с помощью Ливи. Для Spark-submit он работает (отправка задания в Yarn поддерживает это), но для Livy server - нет.

Чтобы он заработал, вам нужно загрузить свою банку в доступное место hdfs / wasbs / adls / http (убедитесь, что ваш Spark настроен для доступа к этому месту).

См. Первый абзац это руководство.

person Aliaksandr Sasnouskikh    schedule 06.11.2019
comment
Привет, Александр, спасибо за ответ !. Сначала я попробовал путь WASB, но он выдает ошибку, говоря ClassNotFound. Это странно, потому что ошибка не имеет смысла, поэтому я предполагаю, что причина, по которой она выдает такую ​​ошибку, заключается в том, что путь WASB не может правильно вернуть файл jar. Итак, я загрузил файл jar с локального компьютера в HDFS, /test4spark/test4sparkhaha.jar - это путь HDFS - person Chase; 07.11.2019
comment
Привет, Чейз, обязательно используйте путь в формате wasb://<mycontainer>@<mystorageaccount>.blob.core.windows.net/path/to/test4sparkhaha.jar. Также убедитесь, что ваш кластер настроен для доступа к этому контейнеру больших двоичных объектов. Обычно, когда вы запускаете HDInsight, вы подключаете учетную запись хранилища BLOB-объектов к кластеру, который может быть доступен без предоставления дополнительных учетных данных, поэтому используйте его. И имя вашего класса выглядит необычно, похоже, что вы указываете на имя пакета, оно должно быть похоже на helloworld4spark.test.MyClassWithMain. - person Aliaksandr Sasnouskikh; 07.11.2019