`
wbj0110
  • 浏览: 1598444 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

hadoop编程:解决eclipse能运行,打包放到集群上ClassNotFoundException:经验总结

阅读更多

本文之所以称之为经验,是因为我们经常碰到莫名其妙的问题,从原理上是说不通的。但是我们却确确实实碰到了。
在刚开始运行的时候,碰到了下文所表示的错误。本想作为经验总结留下来。为了让错误重现,所以又重新操作了一遍。这时候已经换环境,但是环境与原先没做任何的更改,也就是说他们的配置完全是一样的,神奇的是mapreduce执行的完全正确。对于如果碰到下面问题的同学,可以参考。对于原理性的内容,以后在更新。

对于新手,经常遇到,在eclipse中是可以运行的,但是打包放到集群上,不可行,问题如下:

  1. Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/conf/Configuration
  2. at mapreduce.mapreduce.main(mapreduce.java:24)
  3. Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.conf.Configuration
  4. at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
  5. at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
  6. at java.security.AccessController.doPrivileged(Native Method)
  7. at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
  8. at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
  9. at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
  10. at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
  11. ... 1 more
复制代码



  1. hadoop jar '/home/user/Desktop/mapreduce.jar' mapreduce
  2. 14/03/05 05:35:09 WARN mapred.JobClient: Use GenericOptionsParser for parsing the arguments. Applications should implement Tool for the same.
  3. 14/03/05 05:35:09 WARN mapred.JobClient: No job jar file set.  User classes may not be found. See JobConf(Class) or JobConf#setJar(String).
  4. 14/03/05 05:35:09 INFO input.FileInputFormat: Total input paths to process : 1
  5. 14/03/05 05:35:09 INFO util.NativeCodeLoader: Loaded the native-hadoop library
  6. 14/03/05 05:35:10 WARN snappy.LoadSnappy: Snappy native library not loaded
  7. 14/03/05 05:35:10 INFO mapred.JobClient: Running job: job_201402280238_0011
  8. 14/03/05 05:35:11 INFO mapred.JobClient:  map 0% reduce 0%
  9. 14/03/05 05:35:25 INFO mapred.JobClient: Task Id : attempt_201402280238_0011_m_000000_0, Status : FAILED
  10. java.lang.RuntimeException: java.lang.ClassNotFoundException: mapreduce.mapreduce$MyMapper
  11. at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:867)
  12. at org.apache.hadoop.mapreduce.JobContext.getMapperClass(JobContext.java:199)
  13. at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:719)
  14. at org.apache.hadoop.mapred.MapTask.run(MapTask.java:370)
  15. at org.apache.hadoop.mapred.Child$4.run(Child.java:255)
  16. at java.security.AccessController.doPrivileged(Native Method)
  17. at javax.security.auth.Subject.doAs(Subject.java:415)
  18. at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1121)
  19. at org.apache.hadoop.mapred.Child.main(Child.java:249)
  20. Caused by: java.lang.ClassNotFoundException: mapreduce.mapreduce$MyMapper
  21. at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
  22. at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
  23. at java.security.AccessController.doPrivileged(Native Method)
  24. at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
  25. at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
  26. at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
  27. at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
  28. at java.lang.Class.forName0(Native Method)
  29. at java.lang.Class.forName(Class.java:270)
  30. at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:820)
  31. at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:865)
  32. ... 8 more
  33. 14/03/05 05:35:31 INFO mapred.JobClient: Task Id : attempt_201402280238_0011_m_000000_1, Status : FAILED
  34. java.lang.RuntimeException: java.lang.ClassNotFoundException: mapreduce.mapreduce$MyMapper
  35. at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:867)
  36. at org.apache.hadoop.mapreduce.JobContext.getMapperClass(JobContext.java:199)
  37. at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:719)
  38. at org.apache.hadoop.mapred.MapTask.run(MapTask.java:370)
  39. at org.apache.hadoop.mapred.Child$4.run(Child.java:255)
  40. at java.security.AccessController.doPrivileged(Native Method)
  41. at javax.security.auth.Subject.doAs(Subject.java:415)
  42. at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1121)
  43. at org.apache.hadoop.mapred.Child.main(Child.java:249)
  44. Caused by: java.lang.ClassNotFoundException: mapreduce.mapreduce$MyMapper
  45. at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
  46. at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
  47. at java.security.AccessController.doPrivileged(Native Method)
  48. at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
  49. at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
  50. at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
  51. at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
  52. at java.lang.Class.forName0(Native Method)
  53. at java.lang.Class.forName(Class.java:270)
  54. at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:820)
  55. at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:865)
  56. ... 8 more
  57. 14/03/05 05:35:37 INFO mapred.JobClient: Task Id : attempt_201402280238_0011_m_000000_2, Status : FAILED
  58. java.lang.RuntimeException: java.lang.ClassNotFoundException: mapreduce.mapreduce$MyMapper
  59. at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:867)
  60. at org.apache.hadoop.mapreduce.JobContext.getMapperClass(JobContext.java:199)
  61. at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:719)
  62. at org.apache.hadoop.mapred.MapTask.run(MapTask.java:370)
  63. at org.apache.hadoop.mapred.Child$4.run(Child.java:255)
  64. at java.security.AccessController.doPrivileged(Native Method)
  65. at javax.security.auth.Subject.doAs(Subject.java:415)
  66. at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1121)
  67. at org.apache.hadoop.mapred.Child.main(Child.java:249)
  68. Caused by: java.lang.ClassNotFoundException: mapreduce.mapreduce$MyMapper
  69. at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
  70. at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
  71. at java.security.AccessController.doPrivileged(Native Method)
  72. at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
  73. at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
  74. at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
  75. at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
  76. at java.lang.Class.forName0(Native Method)
  77. at java.lang.Class.forName(Class.java:270)
  78. at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:820)
  79. at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:865)
  80. ... 8 more
  81. 14/03/05 05:35:49 INFO mapred.JobClient: Job complete: job_201402280238_0011
  82. 14/03/05 05:35:49 INFO mapred.JobClient: Counters: 7
  83. 14/03/05 05:35:49 INFO mapred.JobClient:   Job Counters 
  84. 14/03/05 05:35:49 INFO mapred.JobClient:     SLOTS_MILLIS_MAPS=33927
  85. 14/03/05 05:35:49 INFO mapred.JobClient:     Total time spent by all reduces waiting after reserving slots (ms)=0
  86. 14/03/05 05:35:49 INFO mapred.JobClient:     Total time spent by all maps waiting after reserving slots (ms)=0
  87. 14/03/05 05:35:49 INFO mapred.JobClient:     Launched map tasks=4
  88. 14/03/05 05:35:49 INFO mapred.JobClient:     Data-local map tasks=4
  89. 14/03/05 05:35:49 INFO mapred.JobClient:     SLOTS_MILLIS_REDUCES=0
  90. 14/03/05 05:35:49 INFO mapred.JobClient:     Failed map tasks=1
复制代码



我们需要分析上面是什么错误,其实就是找不到类,为什么会找不到类,是我们打包问题吗?是因为没有环境不正确吗?
是的,这两方面可能都有问题,那么该如何解决
首先来看看我们是如何打包的:

1.单击map.java文件,弹出快捷菜单,选择Export。



2.第一步之后,我们会看到下面,选择Java下面的JAR file。



3.我们单击Next,进入JAR Export选择我们要打的包即可。




4.单击next下一步,然后在下一步,咱们会看到主类,我们选择主类到Main class



5.选择主类到Main class,我们会看到mapreduce.map,其实这是 包名.类型



6.到这一步,单击finish。我们看到了这个包。并且看到它的大小。

打包完毕,我们放到集群上运行:
出现下面情况
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/conf/Configuration

解决:
对于上面我们是否可以采用另外一种方法:答案是可以的。
就是我们,打成java运行jar包,是绝对可行的。


我们打完包之后,我们会看到,运行包与前面包进行对比,一个K级别,一个是M级别。


总结:
对于上面产生的问题,通用的方法就是我们可以打包成运行包,在集群上运行是没有问题的。
打成运行包,是我们把程序中相关的包都打进运行包中,虽然有点冗余,可以解决初学者面临的这个问题。
但是不适用开发环境和运行环境,版本不一致的情况

http://www.aboutyun.com/thread-7086-1-1.html

分享到:
评论

相关推荐

    hadoop伪集群搭建及eclipse插件配置

    搭建伪集群模式的Hadoop可以用于开发与测试,在这个模式下,所有节点实际上都运行在同一个物理机上,模拟集群的运行环境。同时,通过在开发IDE如Eclipse中配置Hadoop插件,可以更便捷地进行开发和调试Hadoop程序。...

    hadoop2x-eclipse-plugin

    1. 运行MapReduce任务:在项目中右键选择"Run As" -> "Hadoop Job",Eclipse会调用Hadoop的命令行工具提交任务到集群。你可以跟踪任务的状态,查看日志,了解任务运行情况。 2. 调试MapReduce任务:通过"Debug As" ...

    安装hadoop使用Eclipse的插件

    Eclipse是一款流行的开源集成开发环境(IDE),适用于多种编程语言,包括Java,而Hadoop的开发通常涉及到Java编程。为了在Eclipse中方便地开发、调试和运行Hadoop项目,我们需要一个合适的插件,这就是"Hadoop ...

    hadoop2x-eclipse-plugin-master

    总结来说,Hadoop2x-eclipse-plugin-master是Hadoop开发者的得力助手,它通过与Eclipse的深度集成,提供了一站式的开发解决方案,简化了Hadoop项目的开发流程,降低了入门门槛,提升了开发效率。对于想要涉足Hadoop...

    eclipse安装Hadoop插件

    4. **测试连接**:当以上步骤都已完成并且集群运行正常时,应该能够通过Eclipse连接到Hadoop集群并加载其中的文件。 #### 六、释放Hadoop-Common库 1. **解压位置**:将`Hadoop-common.zip`解压至指定位置,例如`E...

    hadoop2x集成eclipse插件压缩包

    " 指出,这个插件的主要优点在于它将Hadoop集群的监控和管理功能引入到Eclipse IDE中,使得开发者不必离开熟悉的开发环境就能查看和操作Hadoop集群。这包括但不限于查看任务状态、监控资源使用情况以及方便的数据...

    eclipse连接hadoop所需要的hadoop.ddl和eclipse插件和hadoop运行案例

    通过学习和运行这些案例,开发者可以快速掌握Hadoop MapReduce编程模型,以及在Eclipse中部署和调试作业的方法。 总的来说,要使Eclipse连接并运行Hadoop项目,我们需要安装Hadoop Eclipse Plugin,并理解`hadoop....

    hadoop2x-eclipse-plugin-original

    5. **Hadoop-Eclipse插件功能**:该插件提供HDFS的浏览和文件操作功能,可以在Eclipse内创建、编辑和运行MapReduce程序,同时还可以直接提交作业到Hadoop集群进行测试和生产运行。 6. **开发环境集成**:通过...

    window下eclipse中运行mapreduce程序所需要的Hadoop全部jar包

    Eclipse还支持远程调试,这对于解决运行时问题非常有用。 总之,要在Windows下的Eclipse环境中成功运行MapReduce程序,关键在于正确配置Hadoop环境,导入所有必要的jar包,并理解如何设置和提交MapReduce作业。这个...

    eclipse hadoop2 插件

    - **运行配置**:可以直接在Eclipse内提交作业到Hadoop集群,无需手动执行命令行操作。 - **资源管理**:显示Hadoop集群的状态,包括节点、任务和作业信息。 - **依赖管理**:帮助管理项目中的Hadoop库和其他相关...

    Hadoop plugin for eclipse

    6. **测试与部署**: 完成开发后,可以通过Eclipse的Export功能,将MapReduce程序打包成JAR,然后在实际的Hadoop集群上运行。 **优势与注意事项** - 使用Eclipse Hadoop插件,开发者可以在熟悉的开发环境中进行...

    hadoop-eclipse-plugin-2.6.0.jar.zip_2.6.0_hadoop_hadoop plugin

    5. **提交作业**:通过插件提供的菜单或快捷键,选择“运行” -> “在Hadoop上运行”,即可将作业提交到Hadoop集群。 三、最佳实践 1. **版本匹配**:确保插件版本与所使用的Hadoop版本兼容,以避免可能出现的问题...

    hadoop-2.6.5 + eclipse附配置hdfs相关文件.zip

    4. **编写和运行MapReduce程序**:使用Eclipse创建Java项目,编写MapReduce代码,并使用Eclipse的Run As > Hadoop Job选项直接在Hadoop集群上运行。 5. **调试和日志查看**:Eclipse还可以帮助调试MapReduce程序,...

    eclipse-hadoop2.7.1.zip

    Eclipse Hadoop插件使得开发者能够在本地模拟Hadoop集群,编写MapReduce作业,并直接在Eclipse中提交到实际的Hadoop集群上执行。 使用这个压缩包,开发者可以: 1. 安装Eclipse Hadoop插件:将“Hadoop-Eclipse-...

    eclipse运行mr插件hadoop-eclipse-plugin-2.6.0.jar

    本文将深入探讨如何使用Eclipse IDE结合hadoop-eclipse-plugin-2.6.0.jar插件,实现在Windows环境下进行远程连接到Hadoop集群,尤其适用于64位操作系统。 首先,我们要理解Hadoop的核心概念。Hadoop是由Apache基金...

    hadoop-eclipse-plugin-2.7.4

    接着,可以创建新的MapReduce项目,编写map和reduce函数,最后通过插件将程序打包并提交到Hadoop集群执行。 总之,Hadoop Eclipse Plugin 2.7.4是Hadoop开发者不可或缺的工具,它通过提供直观的图形界面和强大的...

    eclipse配置hadoop

    Eclipse 配置 Hadoop 及 MapReduce 开发指南 一、Eclipse 中配置 Hadoop 插件 配置 Hadoop 插件是使用 Eclipse 进行 MapReduce 开发的第一步。首先,需要安装 Eclipse 3.3.2 和 Hadoop 0.20.2-eclipse-plugin.jar ...

    hadoop-eclipse-plugin-3.1.1.tar.gz

    Hadoop-Eclipse-Plugin-3.1.1是一款专为Eclipse集成开发环境设计的插件,用于方便地在Hadoop分布式文件系统(HDFS)上进行开发和调试MapReduce程序。这款插件是Hadoop生态系统的组成部分,它使得Java开发者能够更加...

Global site tag (gtag.js) - Google Analytics