0

hdfsへのファイルコピーのためにJavaプログラムを実行すると、次の例外が発生します

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 環境変数と-cpjava へのフラグを慎重に混合してください。これは、/etc/environment で設定した環境変数をオーバーライドする可能性が最も高いです。

/etc/environment に加えた変更が反映されていることも確認する必要があります。

#> echo $CLASSPATH

設定した値が表示されない場合は、おそらくシェル セッションを再起動し、ログアウトしてから再度ログインするか、単にファイルをソースする必要があります。

#> source /etc/environment

余談ですが、hadoop と対話するプログラムを実行する最良の方法は、hadoop シェル スクリプトを使用することです。クラスを 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 に答える