为什么要为包含jar的文件夹设置hadoop\u类路径?

wwodge7n  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(299)

我试着运行wordcount程序。我创建了wordcount.jar。下面是我jar里的东西。

META-INF/<br>
META-INF/MANIFEST.MF<br>
org/myorg/WordCount.class<br>
org/myorg/WordCount$IntSumReducer.class<br>
org/myorg/WordCount$TokenizerMapper.class<br>

我使用以下命令运行程序:

hadoop jar ./wordcount.jar org.myorg.                                                                                                                     WordCount mreduce/input mreduce/output

但是我得到了以下错误:

java.lang.RuntimeException: java.lang.ClassNotFoundException: Class org.myorg.WordCount$TokenizerMapper not found
        at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:1895)
        at org.apache.hadoop.mapreduce.task.JobContextImpl.getMapperClass(JobContextImpl.java:191)
        at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:631)
        at org.apache.hadoop.mapred.MapTask.run(MapTask.java:330)
        at org.apache.hadoop.mapred.Child$4.run(Child.java:268)

但后来我用 export HADOOP_CLASSPATH=<folder where the jar was present> 问题解决了。有人能解释一下吗?

xfyts7mz

xfyts7mz1#

这更像是一个配置问题,而不是hadoop问题。您的wordcount java代码需要hadoop jar和mapreduce jar(主要是客户端jar)。因此,当您运行word count jar时,您的代码需要一个hadoop jar的引用,它们位于hadoop\u classpath目录下。这就是为什么你可以运行一旦路径设置。
系统应该将classpath设置为env变量。
或者,您可以在wordcount jar本身(fat jar)中包含所有必需的jar。

相关问题