classnotfoundexception

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

我正在尝试从 jar 归档并继续获取 ClassNotFoundException 错误。我正在centos 6虚拟机上运行hadoop 1.2.1。
首先我编译了文件 exercise.java (和类)转换为jar文件 exercise.jar 使用以下shell脚本 compile.sh :

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

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

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

这一步 ClassNotFoundException 错误:

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

我意识到显式的路径名可能不是必需的,但我已经有点不顾一切地仔细检查了一切。我已经在我的报告中证实了这一点 exercise.java 文件 exercise.class 在作业配置中,通过 job.setJarByClass(exercise.class); 并确认 exercise.class 包含在 exercise.jar . 好像想不通。
将exec.sh脚本更新为 exercise.class . 它存储在我的eclipse项目目录中:

  1. # !/bin/bash
  2. export CLASSPATH=$CLASSPATH:/pathto/hadoop-common-1.2.1.jar:\
  3. /pathto/hadoop-core-1.2.1.jar:/home/username/workspace/MVN_Hadoop/src/main/java.com.amend.hadoop.MapReduce/*
  4. hadoop jar \
  5. exercise.jar \
  6. /home/username/workspace/MVN_Hadoop/src/main/java.com.amend.hadoop.MapReduce/exercise \
  7. /data/input/inputfile.txt \
  8. /data/output

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

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

x759pob21#

我能看出这个可能的错误。从hadoop jar exercise.jar exercise/data/input/inputfile.txt/data/output中,请指定exercise类的完整路径。i、 e org.name.package.exercise(如果存在)。要交叉检查,请打开jar文件并检查exercise.class location的位置。为了继续,hadoop不希望jar包含在jar中,因为hadoop的路径是全局设置的。
新:看,下面的路径有些奇怪。”/home/hdadmin/workspace/mvn\u hadoop/src/main/java/come/amend/hadoop/mapreduce/exercise“
如果您是使用jar运行的,那么类路径怎么可能如此具体,而不是jar路径呢。这只能是“come/amend/hadoop/mapreduce/exercise”。

相关问题