1. 程式人生 > >實戰 windows7 下 eclipse 遠端除錯 linux hadoop

實戰 windows7 下 eclipse 遠端除錯 linux hadoop

恩,之所以有這篇部落格,是因為最近又有童鞋諮詢怎麼在 windows 7 下用eclipse遠端除錯部署在linux下的hadoop,其實我自己不這麼混搭的,既然有童鞋這麼問了,那我就索性隨著折騰一把了。

首先說明幾點:

遠端除錯對於本地hadoop版本、遠端hadoop版本、eclipse版本都有極為嚴格的相容性要求,我所採用的版本如下:

(1)本地hadoop:0.20.203(如果客戶端和服務端hadoop版本不匹配可能會有協議錯誤)

(2)遠端hadoop:0.20.203(因為各個版本的ipc協議都有變化)

(3)eclipse版本:indigo(這個也很重要,不匹配的話,可能eclipse壓根就無法識別hadoop外掛)

檔案md5碼以及下載地址:

9017a39354fa65375c6ee748963cf2ff  eclipse-jee-indigo-SR2-win32.zip
http://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/indigosr2

(4)客戶端作業系統:win7,遠端作業系統:linux(ubuntu/centos等等,只要是linux均可)

上述搭配中如果有任意一項版本不匹配,均可能有異常發生,這都不在本文的討論範疇,因此開始下文操作前,請務必核對你自己的版本。

第一步:先啟動hadoop守護程序

第二步:在eclipse上安裝hadoop外掛

1.複製 hadoop安裝目錄/contrib/eclipse-plugin/hadoop-0.20.203.0-eclipse-plugin.jar 到 eclipse安裝目錄/plugins/ 下。 

2.重啟eclipse,配置hadoop installation directory。 
如果安裝外掛成功,開啟Window-->Preferens,你會發現Hadoop Map/Reduce選項,在這個選項裡你需要配置Hadoop installation directory。配置完成後退出。

3.配置Map/Reduce Locations。 

在Window-->Show View中開啟Map/Reduce Locations。 


在Map/Reduce Locations中新建一個Hadoop Location。在這個View中,右鍵-->New Hadoop Location。在彈出的對話方塊中你需要配置Location name,如Hadoop,還有Map/Reduce Master和DFS Master。這裡面的Host、Port分別為你在mapred-site.xml、core-site.xml中配置的地址及埠。如:

Map/Reduce Master

?
1 192.168.1.101 9001

DFS Master

?
1 192.168.1.101 9000

配置完後退出。點選DFS Locations-->Hadoop如果能顯示資料夾(2)說明配置正確,如果顯示"拒絕連線",請檢查你的配置。

如果這一步有問題,請看最後的注意事項(1)”。

第三步:新建專案。 
File-->New-->Other-->Map/Reduce Project 
專案名可以隨便取,如WordCount。 
複製 hadoop安裝目錄/src/example/org/apache/hadoop/example/WordCount.java到剛才新建的專案下面。 或者參考:
第四步:上傳模擬資料資料夾。 
為了執行程式,我們需要一個輸入的資料夾,和輸出的資料夾。
在本地新建word.txt

?
1 2 3 4 java c++ python c java c++ javascript helloworld hadoop mapreduce java hadoop hbase

通過hadoop的命令在HDFS上建立/tmp/workcount目錄,命令如下:bin/hadoop fs -mkdir /tmp/wordcount

通過copyFromLocal命令把本地的word.txt複製到HDFS上,命令如下:bin/hadoop fs -copyFromLocal /home/grid/word.txt  /tmp/wordcount/word.txt

第五步:執行專案

1.在新建的專案Hadoop,點選WordCount.java,右鍵-->Run As-->Run Configurations 
2.在彈出的Run Configurations對話方塊中,點Java Application,右鍵-->New,這時會新建一個application名為WordCount 
3.配置執行引數,點Arguments,在Program arguments中輸入“你要傳給程式的輸入資料夾和你要求程式將計算結果儲存的資料夾”,如:

?
1 hdfs://centos1:9000/tmp/wordcount/word.txt   hdfs://centos1:9000/tmp/wordcount/out

4.如果執行時報java.lang.OutOfMemoryError: Java heap space 配置VM arguments(在Program arguments下)

?
1 -Xms512m -Xmx1024m -XX:MaxPermSize=256m

5.點選Run,執行程式。 
點選Run,執行程式,過段時間將執行完成,等執行結束後,檢視執行結果,使用命令: bin/hadoop fs -ls /tmp/wordcount/out檢視例子的輸出結果,發現有兩個資料夾和一個檔案,使用命令檢視part-r-00000檔案, bin/hadoop fs -cat /tmp/wordcount/out/part-r-00000可以檢視執行結果。如果這一步有問題,請看最後的“注意事項(2)”。

截圖如下:

注意事項:

(1)第2步eclipse可能會報無法連線的錯:"Map/Reduce location status updater". org/codehaus/jackson/map/JsonMappingException

經過查詢,是由於hadoop的eclipse 外掛裡面缺少了一些包

按照這篇文章的說明 修改包後 重新執行成功

關於這個eclipse外掛的問題,我已經打包好了,請從如下地址下載:

(2)第5步,可能會報錯:

12/04/24 15:32:44 ERROR security.UserGroupInformation: PriviledgedActionException as:Administrator cause:java.io.IOException: Failed to set permissions of path: \tmp\hadoop-Administrator\mapred\staging\Administrator-519341271\.staging to 0700
Exception in thread "main" java.io.IOException: Failed to set permissions of path: \tmp\hadoop-Administrator\mapred\staging\Administrator-519341271\.staging to 0700
    at org.apache.hadoop.fs.FileUtil.checkReturnValue(FileUtil.java:682)
這是由於Windows下檔案許可權問題,在Linux下可以正常執行,不存在這樣的問題。

解決方法是修改 F:\程式設計開發\hadoop\older\hadoop-0.20.203.0rc1\hadoop-0.20.203.0\src\core\org\apache\hadoop\fs\RawLocalFileSystem.java ,註釋掉 checkReturnValue(有些粗暴,在Window下,可以不用檢查)

?
1 2 3 4 5 6 7 private void checkReturnValue(boolean rv, Path p, FsPermission permission) throws IOException { /*if (!rv) { throw new IOException("Failed to set permissions of path: " + p + " to " + String.format("%04o", permission.toShort())); }*/ }

然後重新編譯、打包 hadoop-core-0.20.203.0.jar ,再次執行即可成功。關於這個重新編譯hadoop的方法我上面的壓縮包裡也有教程文件,為了方便起見,我把已經編譯打包好的jar也上傳了,你直接替換即可。http://vdisk.weibo.com/s/xEJGZ

ok,到此你現在應該可以在windows7下遠端除錯你的hadoop程式碼了,如果沒有成功,請仔細核對各個步驟、各個配置項,Good Luck~

REF:

基於Eclipse的Hadoop應用開發環境配置

cygwin中安裝hadoop+eclipse編譯原始碼並除錯

windows上編譯eclipse-plugin for hadoop-0.20.2-cdh3u3

關於eclipse無法連線報錯:

"Map/Reduce location status updater". org/codehaus/jackson/map/JsonMappingException

經過查詢,是由於hadoop的eclipse 外掛裡面缺少了包

按照這篇文章的說明 修改包後 重新執行成功

如果已經安裝了官方外掛,發現沒法連線的,需要先從eclipse中刪除這個jar包.然後重啟eclipse,(防止快取)

然後再放入新jar包, 再重啟eclipse.

windows下用eclipse連線linux中的hadoop,並執行mr

注意:myeclipse有2點需要注意:

?
1 2 3 4 5 6 7 8 9 10 11 cat eclipse.desktop # chmod 777 注意許可權 [Desktop Entry] Encoding=UTF-8 Name=Eclipse Comment=Eclipse IDE