mapreduce时间的Hadoop库冲突

时间:2012-09-30 19:18:23

标签: java maven 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确实解决了这个问题,但似乎并不太合理。希望有更好的选择。

1 个答案:

答案 0 :(得分:0)

两种方法:

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