我试着运行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>
问题解决了。有人能解释一下吗?
1条答案
按热度按时间xfyts7mz1#
这更像是一个配置问题,而不是hadoop问题。您的wordcount java代码需要hadoop jar和mapreduce jar(主要是客户端jar)。因此,当您运行word count jar时,您的代码需要一个hadoop jar的引用,它们位于hadoop\u classpath目录下。这就是为什么你可以运行一旦路径设置。
系统应该将classpath设置为env变量。
或者,您可以在wordcount jar本身(fat jar)中包含所有必需的jar。