0

在运行我的 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*/"

我仍然得到这个例外。

4

1 回答 1

1

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

您还应该检查您对 /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
于 2013-04-04T09:59:29.063 回答