运行hadoop-jar时出现ClassNotFoundException



我正试图从jar文件运行MapReduce作业,但不断收到ClassNotFoundException错误。我正在Centos6虚拟机上运行Hadoop1.2.1。

首先,我使用以下shell脚本compile.sh:将文件exercise.java(和类)编译为jar文件exercise.jar

#!/bin/bash
javac -classpath /pathto/hadoop-common-1.2.1.jar:
/pathto/hadoop-core-1.2.1.jar /pathto/exercise.java
jar cvf exercise.jar /pathto/*.class

这运行良好,jar成功完成。然后,我尝试使用shell脚本exec.sh:运行实际的MapReduce作业

#!/bin/bash
export CLASSPATH=$CLASSPATH:/pathto/hadoop-common-1.2.1.jar:
/pathto/hadoop-core-1.2.1.jar:/pathto/exercise.class
hadoop jar exercise.jar exercise /data/input/inputfile.txt /data/output

这消除了ClassNotFoundException错误:

Exception in thread "main" java.lang.ClassNotFoundException: exercise
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:274)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:153) 

我意识到明确的路径名称可能没有必要,但我有点不顾一切地要仔细检查所有内容。我已经确认在我的exercise.java文件中,exercise.class通过job.setJarByClass(exercise.class);在作业配置中,并且确认exercise.class包含在exercise.jar中。似乎想不通。

更新完整路径为exercise.class的exec.sh脚本。它存储在我的Eclipse项目目录中:

#!/bin/bash
export CLASSPATH=$CLASSPATH:/pathto/hadoop-common-1.2.1.jar:
/pathto/hadoop-core-1.2.1.jar:/home/username/workspace/MVN_Hadoop/src/main/java.com.amend.hadoop.MapReduce/*
hadoop jar 
exercise.jar 
/home/username/workspace/MVN_Hadoop/src/main/java.com.amend.hadoop.MapReduce/exercise 
/data/input/inputfile.txt 
/data/output

当我实际尝试使用显式写出的路径名运行exec.sh脚本时,我也会得到一组完全不同的错误:

Exception in thread "main" java.lang.ClassNotFoundException: /home/hdadmin/workspace/MVN_Hadoop/src/main/java/come/amend/hadoop/MapReduce/exercise
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:274)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:153) 

我可以看到这种可能的错误。请从Hadoop jar exercise.jar exercise/data/input/inputfile.txt/data/output中指定练习类的完整路径。I.eorg.name.package.exercise(如果存在)。要进行交叉检查,请打开jar文件并检查exercise.class位置的位置。继续说,Hadoop不希望jar包含在jar中,因为Hadoop的路径是全局设置的。

新建:看,下面的路径有些奇怪。"/home/hadmin/workspace/MVN_Hoopo/src/main/java/come/adjate/hadop/MapReduce/exercise"

如果您使用jar运行,那么类路径怎么会如此特定,而不是jar路径呢。它只能是"来/修改/hadoop/MapReduce/练习"这个。

相关内容

  • 没有找到相关文章

最新更新