classnotfound 例外が発生しています。見つからないと主張されているクラスは存在しませんが、クラス名はマップ削減ジョブの入力ファイルのリストへのパスとして設定されています。
INFO server Running: /usr/lib/hadoop/bin/hadoop --config /var/run/cloudera-scm-agent/process/155-hue/JOBSUBD/hadoop-conf jar tmp.jar /user/hduser/datasets/ /user/hduser/tmp/job_20/ mongodb://slave15/db_8.job_20
Exception in thread "main" java.lang.ClassNotFoundException: /user/hduser/datasets/
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at org.apache.hadoop.util.RunJar.main(Runjar.java:190)
ご覧のとおり、/user/hduser/datasets/
は入力ファイルへのパスです。なぜこのエラーが発生するのClassNotFoundException
ですか? なぜそれをクラスと見なすのですか?
私は自分のエラーを見つけました。私はパッケージ構造を持っています。パッケージ情報を指定する必要があります
/usr/lib/hadoop/bin/hadoop
--config /var/run/cloudera-scm-agent/process/155-hue/JOBSUBD/hadoop-conf
jar tmp.jar org.myorg.tmp /user/hduser/datasets/
/user/hduser/tmp/job_20/ mongodb://slave15/db_8.job_20
私のツールでは、パッケージを引数として Java に渡すオプションはありません。だから私は包装をする必要はありません。しかし、この入力ファイルパスの前の引数が欠落しているため、次のエラーが発生しています。
私のクラスは、ルートの tmp.jar に直接あります。つまり、org.myorgなどはありません...
解決:
jar cmf [manifest_file] [jar_name.jar] -C [folder_of_classes] [path_for_jar_file]
manifest_file の内容を、jar アーカイブ内の生成されたマニフェスト ファイルとマージします。manifest_file Main-Class に次の行を含めます: [Name_Of_Class]