聶永的博客

          記錄工作/學習的點點滴滴。

          Hadoop學習筆記之在Eclipse中遠程調(diào)試Hadoop

          插件

          話說Hadoop 1.0.2/src/contrib/eclipse-plugin只有插件的源代碼,這里給出一個我打包好的對應的Eclipse插件:
          下載地址

          下載后扔到eclipse/dropins目錄下即可,當然eclipse/plugins也是可以的,前者更為輕便,推薦;重啟Eclipse,即可在透視圖(Perspective)中看到Map/Reduce。

          配置

          點擊藍色的小象圖標,新建一個Hadoop連接:

          2

          注意,一定要填寫正確,修改了某些端口,以及默認運行的用戶名等

          具體的設置,可見

          正常情況下,可以在項目區(qū)域可以看到

          image

          這樣可以正常的進行HDFS分布式文件系統(tǒng)的管理:上傳,刪除等操作。

          為下面測試做準備,需要先建了一個目錄 user/root/input2,然后上傳兩個txt文件到此目錄:

          intput1.txt 對應內(nèi)容:Hello Hadoop Goodbye Hadoop

          intput2.txt 對應內(nèi)容:Hello World Bye World

          HDFS的準備工作好了,下面可以開始測試了。

          Hadoop工程

          新建一個Map/Reduce Project工程,設定好本地的hadoop目錄

          1

          新建一個測試類WordCountTest:

          右鍵,選擇“Run Configurations”,彈出窗口,點擊“Arguments”選項卡,在“Program argumetns”處預先輸入?yún)?shù):

          hdfs://master:9000/user/root/input2 dfs://master:9000/user/root/output2

          備注:參數(shù)為了在本地調(diào)試使用,而非真實環(huán)境。

          然后,點擊“Apply”,然后“Close”。現(xiàn)在可以右鍵,選擇“Run on Hadoop”,運行。

          但此時會出現(xiàn)類似異常信息:

          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
              at org.apache.hadoop.fs.FileUtil.checkReturnValue(FileUtil.java:682)
              at org.apache.hadoop.fs.FileUtil.setPermission(FileUtil.java:655)
              at org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:509)
              at org.apache.hadoop.fs.RawLocalFileSystem.mkdirs(RawLocalFileSystem.java:344)
              at org.apache.hadoop.fs.FilterFileSystem.mkdirs(FilterFileSystem.java:189)
              at org.apache.hadoop.mapreduce.JobSubmissionFiles.getStagingDir(JobSubmissionFiles.java:116)
              at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:856)
              at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:850)
              at java.security.AccessController.doPrivileged(Native Method)
              at javax.security.auth.Subject.doAs(Subject.java:396)
              at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1093)
              at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:850)
              at org.apache.hadoop.mapreduce.Job.submit(Job.java:500)
              at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:530)
              at com.hadoop.learn.test.WordCountTest.main(WordCountTest.java:85)

          這個是Windows下文件權(quán)限問題,在Linux下可以正常運行,不存在這樣的問題。

          解決方法是,修改/hadoop-1.0.2/src/core/org/apache/hadoop/fs/FileUtil.java里面的checkReturnValue,注釋掉即可(有些粗暴,在Window下,可以不用檢查):

          重新編譯打包hadoop-core-1.0.2.jar,替換掉hadoop-1.0.2根目錄下的hadoop-core-1.0.2.jar即可。

          這里提供一份修改版的hadoop-core-1.0.2-modified.jar文件,替換原h(huán)adoop-core-1.0.2.jar即可。

          替換之后,刷新項目,設置好正確的jar包依賴,現(xiàn)在再運行WordCountTest,即可。

          成功之后,在Eclipse下刷新HDFS目錄,可以看到生成了ouput2目錄:

          image

          點擊“ part-r-00000”文件,可以看到排序結(jié)果:

          Bye    1
          Goodbye    1
          Hadoop    2
          Hello    2
          World    2

          嗯,一樣可以正常Debug調(diào)試該程序,設置斷點(右鍵 –> Debug As – > Java Application),即可(每次運行之前,都需要收到刪除輸出目錄)。

          另外,該插件會在eclipse對應的workspace\.metadata\.plugins\org.apache.hadoop.eclipse下,自動生成jar文件,以及其他文件,包括Haoop的一些具體配置等。

          嗯,更多細節(jié),慢慢體驗吧。

          遇到的異常

          org.apache.hadoop.ipc.RemoteException: org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot create directory /user/root/output2/_temporary. Name node is in safe mode.
          The ratio of reported blocks 0.5000 has not reached the threshold 0.9990. Safe mode will be turned off automatically.
              at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.mkdirsInternal(FSNamesystem.java:2055)
              at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.mkdirs(FSNamesystem.java:2029)
              at org.apache.hadoop.hdfs.server.namenode.NameNode.mkdirs(NameNode.java:817)
              at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
              at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
              at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
              at java.lang.reflect.Method.invoke(Method.java:597)
              at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:563)
              at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1388)
              at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1384)
              at java.security.AccessController.doPrivileged(Native Method)
              at javax.security.auth.Subject.doAs(Subject.java:396)
              at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1093)
              at org.apache.hadoop.ipc.Server$Handler.run(Server.java:1382)

          在主節(jié)點處,關(guān)閉掉安全模式:

          #bin/hadoop dfsadmin –safemode leave

          如何打包

          將創(chuàng)建的Map/Reduce項目打包成jar包,很簡單的事情,無需多言。保證jar文件的META-INF/MANIFEST.MF文件中存在Main-Class映射:

          Main-Class: com.hadoop.learn.test.TestDriver

          若使用到第三方jar包,那么在MANIFEST.MF中增加Class-Path好了。

          另外可使用插件提供的MapReduce Driver向?qū)В梢詭兔ξ覀冊贖adoop中運行,直接指定別名,尤其是包含多個Map/Reduce作業(yè)時,很有用。

          一個MapReduce Driver只要包含一個main函數(shù),指定別名:

          這里有一個小技巧,MapReduce Driver類上面,右鍵運行,Run on Hadoop,會在Eclipse的workspace\.metadata\.plugins\org.apache.hadoop.eclipse目錄下自動生成jar包,上傳到HDFS,或者遠程hadoop根目錄下,運行它:

          # bin/hadoop jar LearnHadoop_TestDriver.java-460881982912511899.jar testcount input2 output3

          OK,本文結(jié)束。

          posted on 2012-04-26 18:31 nieyong 閱讀(29182) 評論(5)  編輯  收藏

          評論

          # re: Hadoop學習筆記之在Eclipse中遠程調(diào)試Hadoop 2012-04-26 22:35 文文木

          非常感謝高手的分享,本人之前寫例子的時候一直卡在文件權(quán)限的問題,后來沒辦法只有到Linux下去寫代碼,看到這篇文章一直困擾的問題可以得到解決,也不用到Linux下寫代碼了,畢竟虛擬機上裝Linux然后在在Eclipse下寫代碼,電腦扛不住!!!非常感謝大牛的分享!!!  回復  更多評論   

          # re: Hadoop學習筆記之在Eclipse中遠程調(diào)試Hadoop 2012-04-27 08:57 nieyong

          @文文木
          偶不是什么牛,只是大家一起學習,分享心得而已 :))  回復  更多評論   

          # re: Hadoop學習筆記之在Eclipse中遠程調(diào)試Hadoop 2012-05-20 10:20 hadoop

          你編譯后jar包可以發(fā)我一份嗎 623758059@qq.com  回復  更多評論   

          # re: Hadoop學習筆記之在Eclipse中遠程調(diào)試Hadoop 2012-07-20 18:27 redwave

          從0.20.2升級到1.0.2之后就報\tmp\hadoop-Administrator\mapred\staging\Administrator-519341271\.staging to 0700這個錯誤,整 了一天了也沒搞定,幸虧看到你的博客,多謝!  回復  更多評論   

          # re: Hadoop學習筆記之在Eclipse中遠程調(diào)試Hadoop 2012-08-03 12:02 lods

          好厲害  回復  更多評論   


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
           

          公告

          所有文章皆為原創(chuàng),若轉(zhuǎn)載請標明出處,謝謝~

          新浪微博,歡迎關(guān)注:

          導航

          <2012年4月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          統(tǒng)計

          常用鏈接

          留言簿(58)

          隨筆分類(130)

          隨筆檔案(151)

          個人收藏

          最新隨筆

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 突泉县| 高青县| 安丘市| 镇巴县| 赤水市| 朝阳市| 始兴县| 花莲市| 清河县| 安远县| 永修县| 海阳市| 扶绥县| 贺兰县| 乌什县| 泾源县| 深水埗区| 元氏县| 镇安县| 海原县| 乐昌市| 肇源县| 霍林郭勒市| 长兴县| 临夏县| 新野县| 中卫市| 太湖县| 神木县| 沭阳县| 洪雅县| 斗六市| 临沭县| 额济纳旗| 西平县| 天等县| 成都市| 宜川县| 三河市| 巴林左旗| 浦江县|