我有一个使用 Hadoop API 启动各种远程 mapreduce 作业的 jar(即,我不使用命令行来启动作业)。执行各种作业的服务 jar 是使用 maven 的“jar-with-dependencies”构建的。
除了使用 commons-codec 1.7 的工作外,我的工作都运行良好,我得到:
致命 org.apache.hadoop.mapred.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 确实解决了问题,但似乎不太理智。希望有更好的选择。