haoman 发表于 2016-12-12 10:21:14

MyEclipse 打包到hadoop集群上运行MR程序提示ClassNotFoundException的两种原因

  今天写MR程序,原来用TextInputFormat改为用KeyValueTextInputFormat类提交到hadoop上一直提示ClassNotFoundException的异常。
  百思不得其解,后来查看源码时发现没有KeyValueTextInputFormat的源代码。
  这时候我注意到我的集群上hadoop版本号是1.0.0,Win7上的jar包和源代码都是1.0.0.
  记得刚开始配机群环境时,由于win7提交到hadoop时 源码有bug导致会导致权限的异常,我曾经把core包换成了1.0.4-modified.jar的包。
  应该是这个原因,希望能提供给遇到同样问题的朋友提供一种解决思路,很可能是jar包版本的问题!
  

  还有一种情况是 要在集群上运行程序是一定要选择“Run on Hadoop”这一项!
  http://zhangqibuptse.iyunv.com/blog/

  比如我自己在本地运行时将下面这条语句注释了以后,程序是在本地跑的:conf.set("mapred.job.tracker", "10.103.240.160:9001");
  后来为了在集群上跑又将这条语句恢复了,但是我运行的时候却是点的上面那个绿色的小按钮,并没有选择“Run on Hadoop”这一选项。
  于是报了Class not found 的异常。
  原因应该是如果点了Run on hadoop 以后,Myeclipse会重新打包上传该程序。
  而如果点绿色小三角按钮,程序还是跑在本地,只不过是通过JobClient对象与服务器进行通信了而已,并没有重新打包上传到集群上。
  
页: [1]
查看完整版本: MyEclipse 打包到hadoop集群上运行MR程序提示ClassNotFoundException的两种原因