如何清除NoClassDefFoundError

时间:2013-04-04 05:50:39

标签: java hadoop classpath

在运行我的java程序以获取文件副本到hdfs时,我得到以下异常

hduser@master:~/Desktop/Source Code$ java -cp . Filesize monis.txt /home/hduser/Desktop/Source*/monis.txt /tmp/user/gutenberg



Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/conf/Configuration
at FileSize.copyFromLocal(FileSize.java:219)
at FileSize.main(FileSize.java:74)
    Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.conf.Configuration
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:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
... 2 more

我在CLASSPATH文件中定义了/etc/environment变量,看起来像是

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games" 

CLASSPATH="/usr/local/hadoop/hadoop-core-1.0.4.jar:/usr/local/hadoop/lib/commons-cli-1.2.jar:/usr/local/hadoop/lib/commons-logging-1.1.1.jar:/usr/local/hadoop/lib/log4j-1.2.15.jar:/home/hduser/Desktop/Source*/"

我仍然得到这个例外。

1 个答案:

答案 0 :(得分:1)

我要小心将CLASSPATH环境变量和-cp标志混合到java中 - 这很可能会覆盖您在/ etc / environment中设置的环境变量。

您还应该检查您对/ etc / environment所做的更改是否已生效:

#> echo $CLASSPATH

如果这没有显示您设置的值,那么您很可能需要重新启动shell会话,再次注销,或者您可以直接获取文件:

#> source /etc/environment

另外,运行与hadoop交互的程序的最佳方法是通过hadoop shell脚本。您需要将类捆绑到一个jar文件中,但随后可以轻松调用您的程序,让脚本负责将hadoop和其他库依赖项添加到类路径中:

#> /usr/local/hadoop/bin/hadoop myJar.jar \
      Filesize monis.txt \
      /home/hduser/Desktop/Source*/monis.txt \
      /tmp/user/gutenberg