在跑mahout的CF时遇到一个类冲突问题,IncompatibleClassChangeError: Found interface org.apache.hadoop.mapreduce.JobContext, but class was expected
如下图
查询了下原因,是由于mahout0.9以下依赖的hadoop版本是1.x,和hadoop 2.x 不兼容导致的。
试了很多方法,例如根据官方的解决办法给mahout打patch,根据fansy1990大神的步骤,试了n次,无论是直接用别人的hadoop-core-0.9.jar包还是我自己打的,都没成功;或是升级mahout版本到0.10或0.11,由于对mahout 0.9以上的版本不是很了解,几次尝试都没有成功。
最后使用了这个方法解决了这个问题。
http://blog.youkuaiyun.com/zhouyan8603/article/details/47401661
按照文章内的步骤,重新打包mahout。需要根据hadoop版本更改下mahout pom的配置,我这边hadoop的版本是2.2.0。打完mahout包后,到目录下的core和math目录下的target目录拿到对应的两个jar包,mahout-core-0.9.jar和mahout-math-0.9.jar,覆盖掉您这边工程mahout所在maven仓库的jar包即可。
感谢玉羽凌风大神!