Eclips中直接調試MP程序中需要注意的問題

      

    下面是我在Eclipse中調試第一個MapReduce程序時遇到的問題及解決方法,這些方法都是在參考其他網友解決類似問題的基礎上結合自己的理解與實驗總結出來的,記錄在這裏希望能對其他人有所幫助。

1)在Eclipse中建立DFS Locations的時侯,要注意Map/Reduce Master是指MapReduce Job TrackerDFS Master是指Namenode的配置,要跟Core-site中的配置一致。

2)在MP程序的Main方法(或者Run方法)中,需要聲明配置Configuration對象,通過Configuration對象進行參數的設置。在參數設置時,語句conf.set("mapred.job.tracker","192.168.100.1:54311")用來指明Hadoop集羣的JobTracker服務器,非常重要,一定不能省略。不要因爲在DFSLocation中已經定義了Map/Reduce Master就不寫它,二者必須同時存在。前者用來建立eclipsHadoop的連接,後者用來建立程序與Hadoop的連接。

   3)同上添加語句conf.set("fs.default.name","hdfs://192.168.100.1:8020"),用來指明程序運行的namenode,如果不對此加以指明,則Eclipse自動使用Project所在的本地文件夾。

4)通過String[] ioArgs=new String[]{"/user/hadoop/dup_in","/user/hadoop/dup_out"};

String[] otherArgs =newGenericOptionsParser(conf,ioArgs).getRemainingArgs();指明Hadoop集羣上數據所在目錄、輸出結果所在目錄,並且要注意的是輸出目錄不能存在,如果已經存在,必須刪除。

   5)運行MP程序時,經常會報unkown host ‘h-master-01’錯誤(h-master-01Namenode服務器的名稱)。以管理員模式打開記事本,找到並打開c:\winodws\system32\drivers\hosts文件,在最後加上主機名與地址的解析關係:h-master-01 192.168.100.1,其中192.168.100.1就是Hadoop集羣Namenode服務器的IP地址。

6)運行程序的時候,如果出現AccessControlExceptioned:PermissionDeniedUser=hadoop……,在程序中,通過Conf.set()設置DFS.permission屬性不起作用,需要在hdfs-site.xml添加屬於對DFS.permission進行設置。

7)程序設計完成後,在eclipse中,通過菜單功能File-Export,把項目打包成JAR文件,然後在程序中,通過conf.set("mapred.jar","d:/exam/hadoop/mp/wordcount.jar");指定打包文件在本地(運行Eclipse開發環境的機器)的標識符。如果不這樣做,在RunAs Hadoop時,會報如下錯誤:

14/01/08 17:40:06 WARNmapred.JobClient: No jobjar file set. User classes may not be found. See JobConf(Class) orJobConf#setJar(String).

14/01/08 17:40:06 INFOinput.FileInputFormat:Total input paths to process : 2

14/01/08 17:40:06 WARNutil.NativeCodeLoader:Unable to load native-hadoop library for yourplatform... using builtin-javaclasses where applicable

14/01/08 17:40:06 WARN snappy.LoadSnappy:Snappynative library not loaded

14/01/08 17:40:07 INFOmapred.JobClient: Runningjob: job_201401081346_0026

14/01/08 17:40:08INFOmapred.JobClient: map 0% reduce 0%

14/01/08 17:40:16 INFOmapred.JobClient: Task Id: attempt_201401081346_0026_m_000000_0, Status :FAILED

java.lang.RuntimeException:java.lang.ClassNotFoundException: wordcount_idh$MapClass

   atorg.apache.hadoop.conf.Configuration.getClass(Configuration.java:944)

   atorg.apache.hadoop.mapreduce.JobContext.getMapperClass(JobContext.java:200)







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