恩,之因此有這篇博客,是由於最近又有童鞋諮詢怎麼在 windows 7 下用eclipse遠程調試部署在linux下的hadoop,其實我本身不這麼混搭的,既然有童鞋這麼問了,那我就索性隨着折騰一把了。javascript
首先說明幾點:html
遠程調試對於本地hadoop版本、遠程hadoop版本、eclipse版本都有極爲嚴格的兼容性要求,我所採用的版本以下:java
(1)本地hadoop:0.20.203(若是客戶端和服務端hadoop版本不匹配可能會有協議錯誤)python
(2)遠程hadoop:0.20.203(由於各個版本的ipc協議都有變化)linux
下載地址:http://archive.apache.org/dist/hadoop/core/hadoop-0.20.203.0/c++
(3)eclipse版本:indigo(這個也很重要,不匹配的話,可能eclipse壓根就沒法識別hadoop插件)apache
文件md5碼以及下載地址:編程
9017a39354fa65375c6ee748963cf2ff eclipse-jee-indigo-SR2-win32.zip
http://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/indigosr2ubuntu
(4)客戶端操做系統:win7,遠程操做系統:linux(ubuntu/centos等等,只要是linux都可)windows
上述搭配中若是有任意一項版本不匹配,都可能有異常發生,這都不在本文的討論範疇,所以開始下文操做前,請務必覈對你本身的版本。
第一步:先啓動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: \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下能夠正常運行,不存在這樣的問題。
參考:http://blog.csdn.net/keda8997110/article/details/8533633
解決方法是修改 F:\編程開發\hadoop\older\hadoop-0.20.203.0rc1\hadoop-0.20.203.0\src\core\org\apache\hadoop\fs\RawLocalFileSystem.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