我正在尝试从实现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之外的第三方罐子
答案 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