我得到一個classnotfound異常。聲稱未找到的類不存在,但類名稱被設置爲我的地圖縮減作業的輸入文件列表的路徑。Hadoop:奇怪ClassNotFoundException
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等等
SOLUTION:
jar cmf [manifest_file] [jar_name.jar] -C [folder_of_classes] [path_for_jar_file]
它會合並在JAR檔案生成的清單文件中的manifest_file的內容。包括在manifest_file Main-Class的下面一行:[Name_Of_Class]
是的,問題是我沒有任何在jar參數後鍵入WordCount的選項。我如何在清單文件中指定它?由於只有外部類和主要方法,它不會自己指定嗎? – Bob
@Bob不,JVM不會掃描類路徑上的所有類,以查看是否只有一個具有'psvm'。你是什麼意思你「沒有任何選擇」來包括一個班級?有關詳細信息,請參見[Jar文件規範](http://docs.oracle.com/javase/6/docs/technotes/guides/jar/jar.html),特別是[Main-Class](http:// docs .oracle.com/javase/6/docs/technotes/guides/jar/jar.html#Main%20Attributes)條目。 –
我在使用一個特定的工具,它要求清單文件包含主要的類信息。 – Bob