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 moreapp
我把這個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