Hadoop问题解决之:java.lang.ClassNotFoundException:com.demo.Demo$DemoMapper

来源:互联网 发布:台达plc编程教学视频 编辑:程序博客网 时间:2024/06/01 23:01

Hadoop问题解决之:java.lang.ClassNotFoundException

  • Hadoop问题解决之javalangClassNotFoundException
    • 前言
    • 解决方法
      • 1打包运行
      • 2打包之后在Eclipse上运行
    • 总结

1.前言

在使用Eclipse进行hadoop项目开发时,通过Eclipse运行编写好的hadoop项目,在运行项目时,可能会出现如下的异常信息:

17/04/17 06:05:50 INFO mapred.JobClient: Task Id : attempt_201704170332_0008_m_000000_1, Status : FAILED17/04/17 06:06:09 INFO mapred.JobClient: Task Id : attempt_201704170332_0008_m_000000_2, Status : FAILEDjava.lang.RuntimeException: java.lang.ClassNotFoundException: com.demo.mapreduce.Demo$DemoMapper    at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:857)    at org.apache.hadoop.mapreduce.JobContext.getMapperClass(JobContext.java:199)    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:718)    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:364)    at org.apache.hadoop.mapred.Child$4.run(Child.java:255)    at java.security.AccessController.doPrivileged(Native Method)    at javax.security.auth.Subject.doAs(Subject.java:415)    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1190)    at org.apache.hadoop.mapred.Child.main(Child.java:249)Caused by: java.lang.ClassNotFoundException: com.aouty.mapreduce.FlightAnalysis$FlightMapper    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)    at java.security.AccessController.doPrivileged(Native Method)    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)    at java.lang.Class.forName0(Native Method)    at java.lang.Class.forName(Class.java:274)    at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:810)    at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:855)

(即:找不到自定义的内部类)
其中Demo为自定义的类,DemoMapper是自定义的内部类。

2.解决方法

解决该类问题时,有以下两种解决办法

2.1打包运行

将项目打包成jar包,然后在命令行使用命令运行,此处,将项目打包在root目录下为demo.jar

localhost@localhost~:hadoop jar demo.jar com.demo.Demo wcin wcout

如此,问题解决

2.2打包之后,在Eclipse上运行

在Eclipse上运行不了主要是因为Eclipse找不到那个类,所以,可以通过将项目打包成jar包,然后为程序指定jar文件路径就好了。此处,将项目打包在root目录下为demo.jar。
在Demo.jar的main方法中的job定义处添加如下代码:

((JobConf)job.getConfiguration()).setJar("/root/Desktop/flightweekdistinct.jar");

然后在运行程序前将参数填入到Run-Run configurations->arguments下即可。

3.总结

以上即为java.lang.ClassNotFoundException
的解决方法。

欢迎大家转载,转载时请注明出处:
snowlive’blog
http://blog.csdn.net/snowlive

0 0
原创粉丝点击