Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop 向启动map reduce作业的代码的类路径添加JAR_Hadoop_Mapreduce_Classpath - Fatal编程技术网

Hadoop 向启动map reduce作业的代码的类路径添加JAR

Hadoop 向启动map reduce作业的代码的类路径添加JAR,hadoop,mapreduce,classpath,Hadoop,Mapreduce,Classpath,我正在尝试从实现工具接口的应用程序启动map reduce作业。 该应用程序很少做其他事情,比如map reduce作业的先决条件 这个类使用一些第三方lib,如何在运行jar时使用以下命令将这些jar添加到类路径:hadoop jar[args] 由此,我尝试将HADOOP_CLASSPATH env var设置为第三方jar,但没有成功。 上面提到的第三方JAR仅是启动作业的类所需,而不是Mapper/Reducer类所需。所以我不需要把它们放在分布式缓存中 当我在$HADOOP_HOME/

我正在尝试从实现工具接口的应用程序启动map reduce作业。 该应用程序很少做其他事情,比如map reduce作业的先决条件

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

由此,我尝试将HADOOP_CLASSPATH env var设置为第三方jar,但没有成功。 上面提到的第三方JAR仅是启动作业的类所需,而不是Mapper/Reducer类所需。所以我不需要把它们放在分布式缓存中

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

谢谢你的关心

注意-我知道将所有第三方jar放在my-map-reduce-job.jar的lib目录中是可行的,但我没有这种自由,jar是使用Maven创建的,我希望这些第三方jar位于map-reduce-job.jar之外,以备将来参考- 在启动map reduce作业的客户机上设置env var HADOOP_类路径是一种方法

我发现了我的错误,我以错误的方式导出HADOOP_类路径。 JAR之间的分隔符依赖于平台,对于Unix,它的冒号(:)

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

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

这是您尝试调用mapred的时候。不是吗?或者即使在尝试hadoop fs-ls时也会出现异常?我没有发现任何hadoop-fs命令的异常,我在线程“main”java.lang.NoClassDefFoundError中发现了第三方jar中的类的异常。谢谢,这意味着您的每个映射过程也需要第三方jar。因此,如果您有多节点集群使用-文件,那么您也需要将这些JAR分发到其他机器option@almasshaikh-我不需要像问题中提到的那样将这些JAR放在分布式缓存中。无论如何,我发现了我的错误——使用HADOOP_类路径是有效的。早些时候,我在罐子之间使用了错误的分隔符。正确的分隔符依赖于操作系统,在我的例子(Unix)中,它应该是冒号(:)谢谢。