Почему возникает ошибка ExceptionInInitializerError при отправке приложения Spark в режиме кластера YARN?

Я использую версию Spark "Spark 1.6.1-mapr-1604".
Мое задание в локальном режиме выполняется успешно, но когда я запускаю то же задание в режиме кластера пряжи, оно выдает ExceptionInInitializerError.

Команда локального режима:

spark-submit --class com.ts.clustering.TrainModel \
ts-0.0.1-SNAPSHOT.jar \
-model /user/hive/warehouse/ts/clustering_model 
-ip /user/hive/warehouse/ts/aidata_seq/* 
-k 10 -ite 10 > app_2.log &

Режим кластера пряжи:

spark-submit --queue dev --master yarn \
--deploy-mode cluster \
--class com.ts.clustering.TrainModel ts-0.0.1-SNAPSHOT.jar \
-model /user/hive/warehouse/ts/clustering_model \
-ip /user/hive/warehouse/ts/aidata_seq/* -k 10 -ite 10 > app_2.log &

Параметр -model — это место вывода для сохранения модели.

Исключение в режиме кластера:

2016-08-29 17:18:46,312 WARN  [task-result-getter-0] scheduler.TaskSetManager: 
  Lost task 0.0 in stage 0.0 (TID 0, ******************): java.lang.ExceptionInInitializerError
        at com.ts.clustering.TrainModel$2.call(TrainModel.java:71)
        at com.ts.clustering.TrainModel$2.call(TrainModel.java:67)
        at org.apache.spark.api.java.JavaPairRDD$$anonfun$toScalaFunction$1.apply(JavaPairRDD.scala:1015)
        at scala.collection.Iterator$$anon$11.next(Iterator.scala:328)
        at scala.collection.Iterator$$anon$14.hasNext(Iterator.scala:389)
        at org.apache.spark.storage.MemoryStore.unrollSafely(MemoryStore.scala:284)
Caused by: org.apache.spark.SparkException: A master URL must be set in your configuration
        at org.apache.spark.SparkContext.<init>(SparkContext.scala:401)
        at org.apache.spark.api.java.JavaSparkContext.<init>(JavaSparkContext.scala:59)
        at com.ts.clustering.TrainModel.<clinit>(TrainModel.java:35)
        ... 21 more

Я просмотрел пару подобных сообщений, но ничего не помогло. Любое предложение было бы большим подспорьем.


person Rahul Sharma    schedule 29.08.2016    source источник
comment
Я голосую за то, чтобы закрыть этот вопрос как не имеющий MVCE и подпадающий под правило не по теме, почему мой код не работает   -  person eliasah    schedule 01.09.2016


Ответы (1)


Глядя на трассировку стека, я заметил следующее:

org.apache.spark.SparkException: A master URL must be set in your configuration
  at org.apache.spark.SparkContext.(SparkContext.scala:401)
  at org.apache.spark.api.java.JavaSparkContext.(JavaSparkContext.scala:59)
  at com.ts.clustering.TrainModel.(TrainModel.java:35)
  ... 21 more

Легко сказать, что вы не указали главный URL-адрес, но запустили приложение, используя --master yarn --deploy-mode cluster.

Я предполагаю, что вы жестко запрограммировали основной URL-адрес как local или вообще не указали его. См. TrainModel.java:35.

person Jacek Laskowski    schedule 30.08.2016
comment
я вообще не указал основной URL. Другие мои искровые задания работают нормально без основного URL-адреса. - person Rahul Sharma; 31.08.2016
comment
Что в TrainModel.java:71? - person Jacek Laskowski; 31.08.2016
comment
Я спросил о конкретной строке в TrainModel в строке 71. Что там? Можете ли вы показать строки 71 и 35 из TrainModel? - person Jacek Laskowski; 31.08.2016
comment
Для чего нужен параметр -model /user/hive/warehouse/ts/clustering_model? Это для чтения модели или записи? - person Jacek Laskowski; 31.08.2016
comment
Я думаю, что ОП также должен искать журналы пряжи. Я боюсь, что журналов Spark недостаточно для отладки приложений, работающих на пряже. - person eliasah; 31.08.2016
comment
Я думаю, что ОП, возможно, сохранил эту модель, а затем попытался загрузить ее без инициализации SC. Я все еще ожидаю найти что-то в коде. - person Jacek Laskowski; 01.09.2016