强制Java jar在EMR上不使用类路径包

时间:2019-05-22 09:11:03

标签: java scala sbt classpath amazon-emr

我正在尝试通过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库。谢谢。

1 个答案:

答案 0 :(得分:1)

您可以尝试隐藏正在使用的依赖项,并且在群集上具有较早版本的依赖项。

您用什么来建造罐子?我在sbt上使用了此策略 https://github.com/sbt/sbt-assembly#shading

但是对于Maven也有一个阴影插件:https://maven.apache.org/plugins/maven-shade-plugin/