Заставить java jar не использовать пакеты classpath в EMR - PullRequest
0 голосов
/ 22 мая 2019

Я пытаюсь запустить толстую банку через spark-submit на EMR. Я столкнулся с проблемой, связанной с зависимостями пакетов. Этот проект зависит от библиотеки google adwords, которую я включил в build.sbt. Проблема в том, что библиотека google adwords внутренне зависит от пакета с именем commons-configuration версии 1.10, но когда я запускаю этот jar на EMR через spark-submit, который запускается через yarn scheduler, используется версия 1.6 этого пакета (commons-configuration) поскольку он является частью CLASSPATH в кластере EMR. Я получаю следующую ошибку

java.lang.NoSuchMethodError: org.apache.commons.configuration.MapConfiguration

Я попытался передать jar зависимостей явно, используя параметр --jars из spark-submit

spark-submit --name my-awesome-spark-job --deploy-mode cluster --class package.path.to.my.Main --jars s3://jar-bucket/jars/commons-configuration-1.10.jar s3://code-bucket/jars/spark-code.jar

Это все равно дает мне ту же ошибку, что и пакет более старой версии от CLASSPATH, несмотря ни на что. Я хотел бы заставить свой jar включать зависимость внутри fat jar и явно использовать их для определенных библиотек, например, здесь есть библиотека google adwords. Благодаря.

1 Ответ

1 голос
/ 22 мая 2019

Вы можете попытаться затенить зависимости, которые вы используете и у которых более старая версия доступна в кластере.

Что вы используете для создания jar?Я использовал эту стратегию с sbt https://github.com/sbt/sbt-assembly#shading

Но есть и плагин Shade для Maven: https://maven.apache.org/plugins/maven-shade-plugin/

...