標籤:
錯誤: 執行hadoop權威指南上MaxTemperature程式出現Mapper類ClassNotFoundException異常:
解決: 將書上的
JobConf job = new JobConf(MaxTemperature.class) ;
改為:
JobConf job = new JobConf() ;job.setJar("/root/hadoop-resources/code/maxtemperature.jar");
下面是我解決過程:
鬱悶一天了,明明照著書(hadoop權威指南)上寫的,但是在執行hadoop MaxTemperature 時總是出現Mapper類找不到。
發現可能是環境變數的問題。於是在/etc/profile中配置hadoop環境變數:
export hadoop_HOME="/usr/hadoop"for f in $hadoop_HOME/hadoop-*.jar; doHADOOP_CLASSPATH=${HADOOP_CLASSPATH}:$fdonefor f in $hadoop_HOME/lib/*.jar;doHADOOP_CLASSPATH=${HADOOP_CLASSPATH}:$fdoneexport HADOOP_CLASSPATH=".$HADOOP_CLASSPATH"
執行,錯誤仍然存在。
然後發現網上說是需要打包,我認為應該不需要打包的,書上都沒有到打包,我用的hadoop版本和他用的是一樣的。但是首先解決問題吧,於是退而求其次。
將產生的class檔案打包為jar:
jar -cvf classes/*.class
然後使用:
hadoop jar maxtemperature.jar Maxtemperature input/sample.txt output
執行命令,發現錯誤依舊。
然後發現網上別人的程式執行就正常了,發現他的jar是放在hadoop安裝目錄的bin下的。於是我充滿疑問的將我的jar複製到bin下,然後執行,好了~~~!!!!
所以這是一種解決方案,將jar複製到hadoop下就可以正常運行了。
但這種方案實在太死板了,最後又在stackoverflow上找到一種方法,書上的範例程式碼寫的是
JobConf job = new JobConf(MaxTemperature.class) ;
改為:
JobConf job = new JobConf() ;job.setJar("/root/hadoop-resources/code/maxtemperature.jar");
然後打包,運行,不算完美的解決~~~~
MaxTemperature程式Mapper ClassNotFoundException