我正在尝试通过EMR上的spark-submit
运行胖子。我遇到了与软件包依赖关系有关的问题。该项目取决于google adwords
中包含的build.sbt
库。问题是google adwords
库内部依赖于名为commons-configuration
版本1.10的软件包,但是当我通过spark-submit
在EMR上运行此jar时,该软件包通过yarn scheduler
运行此版本的1.6软件包(commons-configuration
被使用,因为它是EMR集群上CLASSPATH的一部分。我收到以下错误
java.lang.NoSuchMethodError: org.apache.commons.configuration.MapConfiguration
我尝试使用--jars
的选项spark-submit
显式传递依赖项jar
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将依赖项包含在胖jar中,并将其显式用于某些库,例如google adwords
库。谢谢。
答案 0 :(得分:1)
您可以尝试隐藏正在使用的依赖项,并且在群集上具有较早版本的依赖项。
您用什么来建造罐子?我在sbt上使用了此策略 https://github.com/sbt/sbt-assembly#shading
但是对于Maven也有一个阴影插件:https://maven.apache.org/plugins/maven-shade-plugin/