我有一个jar,它使用hadoopapi启动各种远程mapreduce作业(即,我不使用命令行启动作业)。执行各种作业的服务jar是用maven的“带依赖项的jar”构建的。
我的工作都运行良好,除了一个使用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 codec1.7,而hadoop安装的lib包含commons codec1.4。。。
他们是否有任何方法指示hadoop使用分布式commons codec1.7(我假设这是作为作业依赖分发的),而不是hadoop1.0.3核心库中的commons codec1.4?
非常感谢!
注意:从我的hadoop库文件夹中删除commons-codec-1.4.jar确实解决了这个问题,但似乎不太明智。希望有更好的选择。
1条答案
按热度按时间2wnc66cl1#
两种方法:
您应该能够从hadoop依赖项中排除commons codec,并为commons codec添加另一个显式依赖项
尝试将作用域设置为provided,这样就不会包含任何hadoopjar。这假设这些jar将位于运行时类路径中。