Ant*_*nin 6 java hadoop nosuchmethoderror apache-commons-cli
我正在使用,hadoop-2.7.2并且使用IntelliJ做过MapReduceJob。在我的工作中,我正在使用apache.commons.cli-1.3.1,并将lib放入了jar中。
在Hadoop集群上使用MapReduceJob时,我有一个NoSuchMethodError:
线程“主”中的异常java.lang.NoSuchMethodError:org.apache.commons.cli.Option.builder(Ljava / lang / String;)Lorg / apache / commons / cli / Option $ Builder;
我不明白,因为该方法存在于类中Option,并且该类Option从中提取commons-cli.jar到我的应用程序jar中。而且,我的其他库没有这个问题。
感谢您的时间。
我们能够使用Maven 类重定位来修复此错误。如果您使用 Shade 插件来构建 jar,请将以下内容添加到 pom.xml 的相应部分下:
<!-- necessary to fix NoSuchMethodError: org.apache.commons.cli.Option.builder -->
<relocations>
<relocation>
<pattern>org.apache.commons.cli</pattern>
<shadedPattern>org.shaded.commons.cli</shadedPattern>
</relocation>
</relocations>
Run Code Online (Sandbox Code Playgroud)
此外,还需要在依赖项部分的顶部添加对 commons-cli v1.3+ 的显式引用,然后才能对旧版本的 commons-cli 进行传递引用。
小智 1
我们通过下一个 gradle 配置解决了这个问题:
compile('org.apache.parquet:parquet-tools:1.9.0'){
exclude module:"commons-cli"
}
Run Code Online (Sandbox Code Playgroud)