1. 程式人生 > >MyEclipse 打包到hadoop叢集上執行MR程式提示ClassNotFoundException的兩種原因

MyEclipse 打包到hadoop叢集上執行MR程式提示ClassNotFoundException的兩種原因

今天寫MR程式,原來用TextInputFormat改為用KeyValueTextInputFormat類提交到hadoop上一直提示ClassNotFoundException的異常。

百思不得其解,後來檢視原始碼時發現沒有KeyValueTextInputFormat的原始碼。

這時候我注意到我的叢集上hadoop版本號是1.0.0,Win7上的jar包和原始碼都是1.0.0.

記得剛開始配機群環境時,由於win7提交到hadoop時  原始碼有bug導致會導致許可權的異常,我曾經把core包換成了1.0.4-modified.jar的包。

應該是這個原因,希望能提供給遇到同樣問題的朋友提供一種解決思路,很可能是jar包版本的問題

還有一種情況是 要在叢集上執行程式是一定要選擇“Run on Hadoop”這一項!


比如我自己在本地執行時將下面這條語句註釋了以後,程式是在本地跑的:conf.set("mapred.job.tracker", "10.103.240.160:9001");

後來為了在叢集上跑又將這條語句恢復了,但是我執行的時候卻是點的上面那個綠色的小按鈕,並沒有選擇“Run on Hadoop”這一選項。

於是報了Class not found 的異常。

原因應該是如果點了Run on hadoop 以後,Myeclipse會重新打包上傳該程式。

而如果點綠色小三角按鈕,程式還是跑在本地,只不過是通過JobClient物件與伺服器進行通訊了而已,並沒有重新打包上傳到叢集上。