【hadoop】Hadoop學習筆記(九):如何在windows上使用eclipse遠程連接hadoop進行程序開發

由於hadoop主要是部署和應用在linux環境中的,但是目前鄙人自知能力有限,還無法完全把工作環境轉移到linux中去(當然還有點小私心啦,windows下那麼多好用的程序到linux下用不了還真有點心疼——比如說快播,O(∩_∩)O~),於是便想着用eclipse來遠程連接hadoop進行開發,摸索了一番,下面是其步驟:

  1. 首先把hadoop-eclipse-plugin-1.0.4.jar(具體版本視你的hadoop版本而定)放到eclipse安裝目錄的plugins文件夾中,如果重新打開eclipse後看到有如下視圖,則說明你的hadoop插件已經安裝成功了:
 

  其中的“hadoop installation directory”配置項用於指向你的hadoop安裝目錄,在windows下你只需要把下載到的hadoop-1.0.4.tar.gz包解壓到某個位置,然後指向這個位置即可。

  2. 配置eclipse中的Map/Reduce Locations,如下圖所示:

  其中主機“master”是我在“C:\Windows\System32\drivers\etc\hosts”中自定義的主機名:    
    218.195.250.80 master

  這時如果在eclipse中能看到如下“DFS Locations”,就說明eclipse已經成功連上遠程的hadoop了(注意,別忘了把你的視圖切換到Map/Reduce視圖,而不是默認的Java視圖):
  

  3. 現在我們來測試《hadoop權威指導》中的MaxTemperature例子程序,建立如下三個類:

  這時如果我們運行MaxTemperature類,會報如下錯:

12/04/24 15:32:44 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 
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 

  這個是Windows下文件權限問題,在Linux下可以正常運行,不存在這樣的問題。
  解決方法是,修改hadoop-1.0.4/src/core/org/apache/hadoop/fs/FileUtil.java裏面的checkReturnValue,註釋掉即可(有些粗暴,在Window下,可以不用檢查):
  重新編譯打包hadoop-core-1.0.4.jar,替換掉hadoop-1.0.4根目錄下的hadoop-core-1.0.4.jar即可。(我重新打包的時候出了點問題,就直接以從網上下載的hadoop-core-1.0.2.jar代替hadoop-core-1.0.4.jar了,這樣也可以正常運行,下載地址:https://skydrive.live.com/?cid=cf7746837803bc50&id=CF7746837803BC50%211276
  (其實還有另一種簡單的辦法,我們只需要把hadoop-1.0.4/src/core/org/apache/hadoop/fs/FileUtil.java修改之後重新編譯過的class文件加入到原來的hadoop-core-1.0.4.jar包中代替原來的FileUtil.class文件即可,這裏有一個已經做好的適合於windows環境的hadoop-core-1.0.4.jar包了,你可以直接下載

  另外,我還遇到了這麼一個錯誤:

org.apache.hadoop.security.AccessControlException:Permission denied:user=Administrator,access=WRITE,inode="tmp":root:supergroup:rwxr-xr-x 。

  這個錯誤有些蹊蹺,因爲我已經在map/reduce locations中配置了用戶名是hadoop(hadoop就是我linux上運行hadoop集羣的用戶名),不知道它爲什麼還是以Administrator用戶身份來方位hadoop的,解決辦法如下:

  問題原因:本地用戶administrator(本機windows用戶)想要遠程操作hadoop系統,沒有權限引起的。
      解決辦法:
            a、如果是測試環境,可以取消hadoop hdfs的用戶權限檢查。打開conf/hdfs-site.xml,找到dfs.permissions屬性修改爲false(默認爲true)OK了。
            b、修改hadoop location參數,在advanced parameter選項卡中,找到hadoop.job.ugi項,將此項改爲啓動hadoop的用戶名即可。(注意第一次設置的時候可能沒有hadoop.job.ugi參數,報錯後在去看就有了。)
      c、因爲Eclipse使用hadoop插件提交作業時,會默認以 DrWho 身份去將作業寫入hdfs文件系統中,對應的也就是 HDFS 上的/user/hadoop ,  由於 DrWho 用戶對hadoop目錄並沒有寫入權限,所以導致異常的發生。解決方法爲:放開 hadoop 目錄的權限 , 命令如下 :$ hadoop fs -chmod 777 

運行成功後的結果如下所示:
  
轉載請註明出處:http://www.cnblogs.com/beanmoon/archive/2013/01/05/2845579.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章