将jar添加到启动map reduce代码的代码的类路径中

时间:2015-01-01 13:05:47

标签: hadoop mapreduce classpath

我正在尝试从实现Tool接口的应用程序启动map reduce作业。 该应用程序很少做其他事情,就像地图减少工作的先决条件一样。

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

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

当我在$ HADOOP_HOME / lib下复制我需要的第三方罐子时,它可以工作,但我需要更清洁的解决方案。

感谢您的参与。

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

1 个答案:

答案 0 :(得分:2)

供将来参考 - 在启动地图的客户端计算机上设置env var HADOOP_CLASSPATH减少作业是可行的方法。

我弄清楚了我的错误,我正以错误的方式导出HADOOP_CLASSPATH。 罐子之间的分离器是平台相关的,对于Unix,它的冒号(:)

导出HADOOP_CLASSPATH = / path /到/ my / jar1:/ path /到/ my / jar2 然后 hadoop jar [mainClass] [args]

如果已在其他位置预定义了您的罐子,您可能希望将其附加到HADOOP_CLASSPATH env var。 export HADOOP_CLASSPATH = $ HADOOP_CLASSPATH:/ path / to / my / jar1:/ path / to / my / jar2