在运行我的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*/"
我仍然得到这个例外。
答案 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