将 jars 添加到启动 map reduce 作业的代码的类路径中

Adding jars to the classpath of the code that launches map reduce job

我正在尝试从实现 Tool 接口的应用程序启动 map reduce 作业。 该应用程序几乎没有做其他事情,例如 map reduce 作业的先决条件。

此 class 使用一些第三方库,如何在使用以下命令运行 jar 时将这些 jar 添加到 class 路径:hadoop jar < myjar > [args]

从这个 Cloudera's post 我尝试将 HADOOP_CLASSPATH env var 设置为第三方 jar,但没有成功。 上面提到的第三方 jar 只需要启动作业的 class 而不是 Mapper/Reducer classes。所以我不需要把它们放在分布式缓存中。

当我在 $HADOOP_HOME/lib 下复制我需要的这些第三方 jar 时,它可以工作,但我需要一个更干净的解决方案。

感谢期待。

注意 - 我知道将所有第三方 jar 放在 my-map-reduce-job.jar jar 的 lib 目录中会起作用,但我没有那个自由,jar 是使用 Maven 创建的我想要这些第三方 jar 在 my-map-reduce-job.jar

之外

供将来参考 - 在启动 map reduce 作业的客户端机器上设置 env var HADOOP_CLASSPATH 是可行的方法。

我发现了我的错误,我以错误的方式导出 HADOOP_CLASSPATH。 罐子之间的分隔符是平台相关的,对于 Unix,它的冒号 (:)

导出 HADOOP_CLASSPATH=/path/to/my/jar1:/path/to/my/jar2 接着 hadoop jar [mainClass] [args]

如果已在别处预定义,您可能希望将 jar 附加到 HADOOP_CLASSPATH env var。 导出 HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/path/to/my/jar1:/path/to/my/jar2