Eclips中直接调试MP程序中需要注意的问题

来源:互联网 发布:windows subst 编辑:程序博客网 时间:2024/06/04 19:19

      

    下面是我在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)







0 0
原创粉丝点击