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”这一项!


比如我自己在本地运行时将下面这条语句注释了以后,程序是在本地跑的:conf.set("mapred.job.tracker", "10.103.240.160:9001");

后来为了在集群上跑又将这条语句恢复了,但是我运行的时候却是点的上面那个绿色的小按钮,并没有选择“Run on Hadoop”这一选项。

于是报了Class not found 的异常。

原因应该是如果点了Run on hadoop 以后,Myeclipse会重新打包上传该程序。

而如果点绿色小三角按钮,程序还是跑在本地,只不过是通过JobClient对象与服务器进行通信了而已,并没有重新打包上传到集群上。


你可能感兴趣的:(MyEclipse 打包到hadoop集群上运行MR程序提示ClassNotFoundException的两种原因)