hadoop錯誤之ClassNotFoundException

http://www.cnblogs.com/kaizhangzhang/p/3495438.htmlhtml

 

在win7下運行hadoop-1.1.2 worldcount代碼的時候出現下面的錯誤,折騰了差很少一天的時間,才明白致使http://www.cnblogs.com/kaizhangzhang/p/3494753.html這個錯誤的緣由,一下是錯誤的完整信息:java

eclipse顯示:apache

13/12/28 15:44:00 WARN mapred.JobClient: No job jar file set.  User classes may not be found. See JobConf(Class) or JobConf#setJar(String).
13/12/28 15:44:00 INFO input.FileInputFormat: Total input paths to process : 1
13/12/28 15:44:00 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
13/12/28 15:44:00 WARN snappy.LoadSnappy: Snappy native library not loaded
13/12/28 15:44:00 INFO mapred.JobClient: Running job: job_201312281229_0013
13/12/28 15:44:01 INFO mapred.JobClient:  map 0% reduce 0%
13/12/28 15:44:07 INFO mapred.JobClient: Task Id : attempt_201312281229_0013_m_000000_0, Status : FAILED
java.lang.RuntimeException: java.lang.ClassNotFoundException: com.kai.hadoop.MyMapreduce$MyMap
 at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:849)
 at org.apache.hadoop.mapreduce.JobContext.getMapperClass(JobContext.java:199)
 at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:719)
 at org.apache.hadoop.mapred.MapTask.run(MapTask.java:370)
 at org.apache.hadoop.mapred.Child$4.run(Child.java:255)
 at java.security.AccessController.doPrivileged(Native Method)
 at javax.security.auth.Subject.doAs(Subject.java:415)
 at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1149)
 at org.apache.hadoop.mapred.Child.main(Child.java:249)
ubuntu

查看了job的輸出日誌,顯示錯誤:windows

java.lang.RuntimeException: java.lang.ClassNotFoundException: 
com.kai.hadoop.WordCount$TokenizerMapper at 
org.apache.hadoop.conf.Configuration.getClass(Configuration.java:849) at 
org.apache.hadoop.mapreduce.JobContext.getMapperClass(JobContext.java:199) at 
org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:719) at 
org.apache.hadoop.mapred.MapTask.run(MapTask.java:370) at 
org.apache.hadoop.mapred.Child$4.run(Child.java:255) at 
java.security.AccessController.doPrivileged(Native Method) at 
javax.security.auth.Subject.doAs(Subject.java:415) at 
org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1149) 
at org.apache.hadoop.mapred.Child.main(Child.java:249) Caused by: 
java.lang.ClassNotFoundException: com.kai.hadoop.WordCount$TokenizerMapper 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:425) at 
sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at 
java.lang.ClassLoader.loadClass(ClassLoader.java:358) at 
java.lang.Class.forName0(Native Method) at 
java.lang.Class.forName(Class.java:270) at 
org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:802) at 
org.apache.hadoop.conf.Configuration.getClass(Configuration.java:847) ... 8 more
app

我把這個WorldCount程序打成jar包在ubuntu上是能夠正常運行,因爲本身我的很是懶,是在不想換開發平臺,依然堅持在windows上開發,在網上找了種種方案,最後終於解決了,網上說的也含含糊糊的,東平西湊的理解在一塊兒總結:eclipse

  一、網上好多說要設置這job.setJarByClass(WordCount.class);可是hadoop-1.1.2的worldcount源碼是有job.setJarByClass(WordCount.class);咱們找到conf所在的位置,加conf.set("mapred.jar", "C:\\Users\\win7\\Desktop\\mapreduce.jar");  注意:"mapred.jar"不能改,後面是你導出jar的路徑oop

  二、把工程打成xx.jar就是上面的mapreduce.jar,(右擊工程->選擇Export->選擇要輸出的package),我放在"C:\\Users\\win7\\Desktop",通常最好放工程裏面,默認路徑下ui

最後運行就能夠了,而後就能夠正常運行了,哈哈....雖然仍是有點麻煩,要打jar包還要每次設置conf.set(),可是至少目前不用換環境了,比起每次上傳到ubuntu再運行方便了一點點,對於初學的我來講已是很好的開始,我以爲本身確定是哪尚未配置好,應該還能夠繼續改進,繼續研究...但願有知道的大神留下寶貴的意見!!spa

相關文章
相關標籤/搜索