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協議都有變化)

下載地址: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