映射缩短时间的Hadoop库冲突

我有一个使用Hadoop API启动各种远程mapreduce作业的jar(即,我不使用命令行来启动作业)。 执行各种作业的服务jar是使用maven的“jar-with-dependencies”构建的。

我的工作都运行良好,除了使用commons-codec 1.7,我得到:

FATAL org.apache.hadoop.mapred.Child:运行child时出错:java.lang.NoSuchMethodError:org.apache.commons.codec.binary.Base64.encodeAsString([B] Ljava / lang / String;

我想这是因为我的jar包含commons-codec 1.7而我的Hadoop安装的lib有commons-codec 1.4 ……

他们是否有任何方式指示Hadoop使用分布式commons-codec 1.7(我假设这是作为作业依赖项分发)而不是hadoop 1.0.3核心库中的commons-codec 1.4?

非常感谢!

注意:从我的Hadoop库文件夹中删除commons-codec-1.4.jar确实解决了这个问题,但似乎并不太合理。 希望有更好的选择。

两种方法:

  • 您应该能够从hadoop依赖项中排除commons-codec,并为commons-codec添加另一个显式依赖项
  • 尝试将范围设置为提供,以便不包括任何hadoop jar。 这假设这些jar将位于运行时类路径中。