java - Hadoop NoSuchMethodError apache.commons.cli

标签 java hadoop nosuchmethoderror apache-commons-cli

我正在使用 hadoop-2.7.2,我用 IntelliJ 做了一个 MapReduceJob。在我的工作中,我正在使用 apache.commons.cli-1.3.1 并将 lib 放入 jar 中。

当我在我的 Hadoop 集群上使用 MapReduceJob 时,我有一个 NoSuchMethodError:

Exception in thread "main" 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 class relocations 修复此错误.如果您使用 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>

还需要在依赖项部分的顶部添加对 commons-cli v1.3+ 的显式引用,然后再添加任何可能具有对旧版本 commons-cli 的传递引用的依赖项。

关于java - Hadoop NoSuchMethodError apache.commons.cli,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38654957/

相关文章:

java - Android:DOM vs SAX vs XMLPullParser 解析?

java - 使用 @Component 继承抽象类 (NoUniqueBeanDefinitionException)

java - 如何使用 Java Timer 和 TimerTask 安排具有开始时间和结束时间的任务

python - 我可以在本地计算机上使用Apache Spark处理100 GB的数据吗?

java - 为什么我的方法会抛出 NoSuchMethodError?

java - 某些操作系统版本上的 NoSuchMethodError

未使用的方法的 java.lang.NoSuchMethodError

java - 抽象类和枚举

hadoop - 在两节点 hadoop 集群中运行映射缩减作业时出错 : Too many fetch-failures, 读取任务输出时出错 http://localhost:50060/tasklog

hadoop - 在 HIVE 中,在 4 列上连接 2 个表时什么能提供最佳性能?键列类型 String、Int 或 binary?