Чтобы отправить приложение Spark в кластер, их документация отмечает:
Для этого создайте сборочный jar (или «uber» jar), содержащий ваш код и его зависимости. И sbt, и Maven имеют плагины сборки. При создании JAR-файлов сборки укажите Spark и Hadoop в качестве предоставленных зависимостей; их не нужно объединять, поскольку они предоставляются менеджером кластера во время выполнения. -- http://spark.apache.org/docs/latest/submitting-applications.html
Итак, я добавил подключаемый модуль Apache Maven Shade в свой файл pom.xml
. (версия 3.0.0)
И я превратил область зависимости Spark в provided
. (версия 2.1.0)
(Я также добавил подключаемый модуль сборки Apache Maven, чтобы убедиться, что я упаковываю все свои зависимости в банку при запуске mvn clean package
. Я не уверен, действительно ли это необходимо.)
Вот как spark-submit
терпит неудачу. Он выдает NoSuchMethodError
для моей зависимости (обратите внимание, что код работает из локального экземпляра при компиляции внутри IntelliJ, предполагая, что provided
удалено).
Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Stopwatch.createStarted()Lcom/google/common/base/Stopwatch;
Строка кода, выдающая ошибку, не имеет значения — это просто первая строка в моем основном методе, который создает Stopwatch
, часть утилит Google Guava. (версия 21.0)
Другие онлайн-решения предполагают, что это связано с конфликтами версий Guava, но мне пока не повезло с этими предложениями. Любая помощь будет оценена по достоинству, спасибо.