實戰 windows7 下 eclipse 遠端除錯 linux hadoop
恩,之所以有這篇部落格,是因為最近又有童鞋諮詢怎麼在 windows 7 下用eclipse遠端除錯部署在linux下的hadoop,其實我自己不這麼混搭的,既然有童鞋這麼問了,那我就索性隨著折騰一把了。
首先說明幾點:
遠端除錯對於本地hadoop版本、遠端hadoop版本、eclipse版本都有極為嚴格的相容性要求,我所採用的版本如下:
(1)本地hadoop:0.20.203(如果客戶端和服務端hadoop版本不匹配可能會有協議錯誤)
(2)遠端hadoop:0.20.203(因為各個版本的ipc協議都有變化)
下載地址:http://archive.apache.org/dist/hadoop/core/hadoop-0.20.203.0/
(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守護程序
具體參看:http://www.cnblogs.com/flyoung2008/archive/2011/11/29/2268302.html
第二步:在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
192.168.1.101 9001
DFS Master
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到剛才新建的專案下面。 或者參考:http://my.oschina.net/leejun2005/blog/83058 第四步:上傳模擬資料資料夾。 為了執行程式,我們需要一個輸入的資料夾,和輸出的資料夾。 在本地新建word.txt
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中輸入“你要傳給程式的輸入資料夾和你要求程式將計算結果儲存的資料夾”,如:
hdfs://centos1:9000/tmp/wordcount/word.txt hdfs://centos1:9000/tmp/wordcount/out
4.如果執行時報java.lang.OutOfMemoryError: Java heap space 配置VM arguments(在Program arguments下)
-Xms512m -Xmx1024m -XX:MaxPermSize=256m
關於jvm記憶體分配理解,請參考:http://my.oschina.net/leejun2005/blog/122963
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 外掛裡面缺少了一些包
按照這篇文章的說明 修改包後 重新執行成功
http://hi.baidu.com/wangyucao1989/blog/item/279cef87c4b37c34c75cc315.html
關於這個eclipse外掛的問題,我已經打包好了,請從如下地址下載:
http://vdisk.weibo.com/s/xEJGZ
(2)第5步,可能會報錯:
12/04/24 15:32:44 ERROR security.UserGroupInformation: PriviledgedActionException as:Administrator cause:java.io.IOException: Failed to set permissions of path: tmphadoop-AdministratormapredstagingAdministrator-519341271.staging to 0700 Exception in thread "main" java.io.IOException: Failed to set permissions of path: tmphadoop-AdministratormapredstagingAdministrator-519341271.staging to 0700 at org.apache.hadoop.fs.FileUtil.checkReturnValue(FileUtil.java:682) 這是由於Windows下檔案許可權問題,在Linux下可以正常執行,不存在這樣的問題。
參考:http://blog.csdn.net/keda8997110/article/details/8533633
解決方法是修改 F:程式設計開發hadoopolderhadoop-0.20.203.0rc1hadoop-0.20.203.0srccoreorgapachehadoopfsRawLocalFileSystem.java ,註釋掉 checkReturnValue(有些粗暴,在Window下,可以不用檢查)
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應用開發環境配置
http://www.cnblogs.com/flyoung2008/archive/2011/12/09/2281400.html (本文參考此文)
http://blog.sina.com.cn/s/blog_62186b4601012acs.html
cygwin中安裝hadoop+eclipse編譯原始碼並除錯
http://dl.iteye.com/topics/download/04aca317-2d9f-3a95-90bf-ec569eb38bbc
windows上編譯eclipse-plugin for hadoop-0.20.2-cdh3u3
http://superlxw1234.iteye.com/blog/1749038
關於eclipse無法連線報錯:
"Map/Reduce location status updater". org/codehaus/jackson/map/JsonMappingException
經過查詢,是由於hadoop的eclipse 外掛裡面缺少了包
按照這篇文章的說明 修改包後 重新執行成功
http://hi.baidu.com/wangyucao1989/blog/item/279cef87c4b37c34c75cc315.html
如果已經安裝了官方外掛,發現沒法連線的,需要先從eclipse中刪除這個jar包.然後重啟eclipse,(防止快取)
然後再放入新jar包, 再重啟eclipse.
windows下用eclipse連線linux中的hadoop,並執行mr
http://superlxw1234.iteye.com/blog/1583164
注意:myeclipse有2點需要注意:
cat eclipse.desktop # chmod 777 注意許可權
[Desktop Entry]
Encoding=UTF-8
Name=Eclipse
Comment=Eclipse IDE
Exec=/home/june/soft/eclipse/eclipse
Icon=/home/june/soft/eclipse/icon.xpm
Terminal=false
StartupNotify=true
Type=Application
Categories=Application;Development;
(1)Icon=/home/june/download/myeclipse-8.4.200-linux-gtk-x86/icon.xpm 這裡不能有空格、雙引號等其它符號,空格轉義即可。
(2)hadoop的jar包直接丟到 /home/june/Genuitec/MyEclipse 8.5 M2/dropins 即可,不需要找什麼 plugins 目錄。
Hadoop學習筆記(九):如何在windows上使用eclipse遠端連線hadoop進行程式開發
http://www.cnblogs.com/beanmoon/archive/2013/01/05/2845579.html
Hadoop作業提交多種方案具體流程詳解
http://weixiaolu.iteye.com/blog/1402919
Hadoop叢集(第7期)_Eclipse開發環境設定
http://www.cnblogs.com/xia520pi/archive/2012/05/20/2510723.html