分享

Mahout编译后,还是出现 but class was expected问题

Joker 发表于 2015-1-20 18:10:09 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 6 41736
我使用这条命令进行编译的Mahout
  1. mvn clean install -Dhadoop2 -Dhadoop2.version=2.2.0 -DskipTests
复制代码
编译也是非常顺利的编译完毕了,整合Hadoop2.2的代码可以跑,但是放在集群上就开始抛出
  1. Exception in thread "main" java.lang.IncompatibleClassChangeError: Found interface org.apache.hadoop.mapreduce.JobContext, but class was expected
  2.         at org.apache.mahout.common.HadoopUtil.getCustomJobName(HadoopUtil.java:174)
  3.         at org.apache.mahout.common.AbstractJob.prepareJob(AbstractJob.java:614)
  4.         at org.apache.mahout.cf.taste.hadoop.preparation.PreparePreferenceMatrixJob.run(PreparePreferenceMatrixJob.java:73)
  5.         at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
  6.         at org.apache.mahout.cf.taste.hadoop.item.RecommenderJob.run(RecommenderJob.java:164)
  7.         at cn.base.itemCF.ItemCFHadoop.main(ItemCFHadoop.java:54)
复制代码
这个异常!没招了,大神们支支招把

已有(6)人评论

跳转到指定楼层
nextuser 发表于 2015-1-20 19:01:35
本帖最后由 nextuser 于 2015-1-20 20:53 编辑


首先确认版本兼容,然后检查配置文件

  1. <groupId>org.apache.hadoop</groupId>
  2. <artifactId>hadoop-core</artifactId>                                                   
  3. <version> 2.2.0</version>
复制代码
检查环境变量

  1. export HADOOP_HOME=/path/to/hadoop/home
  2. export HADOOP_COMMONS_HOME=/path/to/commons/home
  3. export JAVA_HOME=/path/to/java/home
  4. export PATH="$PATH:$HADOOP_HOME/bin"
复制代码


尝试运行下面命令

  1. bin/mahout recommenditembased \
  2.    --input INPUT --output OUTPUT \
  3.    --tempDir TEMP --similarityClassname SIMILARITY_LOGLIKELIHOOD
复制代码


这里有有关的代码

https://github.com/apache/mahout

用这个编译试试
  1. mvn clean package -Dhadoop2.version=2.2.0
复制代码









回复

使用道具 举报

Joker 发表于 2015-1-20 20:23:16
nextuser 发表于 2015-1-20 19:01
首先确认版本兼容,然后检查配置文件

检查环境变量

我怎么没找你的hadoop-core,只有最外层的pom.xml中的client
回复

使用道具 举报

s060403072 发表于 2015-1-20 20:31:05
本帖最后由 s060403072 于 2015-1-20 23:12 编辑
如果使用官网提供的下载hadoop2.2.0以及mahout0.9进行调用mahout的相关算法会报错。一般报错如下:

java.lang.IncompatibleClassChangeError: Found interface org.apache.hadoop.mapreduce.JobContext, but class was expected
at org.apache.mahout.common.HadoopUtil.getCustomJobName(HadoopUtil.java:174)
at org.apache.mahout.common.AbstractJob.prepareJob(AbstractJob.java:614)
at org.apache.mahout.cf.taste.hadoop.preparation.PreparePreferenceMatrixJob.run(PreparePreferenceMatrixJob.java:73)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
这个是因为目前mahout只支持hadoop1 的缘故。在这里可以找到解决方法:https://issues.apache.org/jira/browse/MAHOUT-1329。主要就是修改pom文件,修改mahout的依赖。
大家可以下载修改后的源码包(链接:http://pan.baidu.com/s/1kTvGc2z 密码:j8qa)自己编译mahout,或者直接下载已经编译好的jar包(链接:http://pan.baidu.com/s/1c04bNhQ 密码:l354)。


回复

使用道具 举报

langke93 发表于 2015-1-20 20:48:50
楼主的命令也有些问题,如果使用install 的方式,不要忘记Dhadoop.2,之间的点
mvn clean install -Dhadoop2 -Dhadoop.2.version=${hadoop.version}

回复

使用道具 举报

nextuser 发表于 2015-1-20 20:57:01
Joker 发表于 2015-1-20 20:23
我怎么没找你的hadoop-core,只有最外层的pom.xml中的client


示例:
MVN工程中添加如下依赖

  1. <dependency>
  2.     <groupId>org.apache.hadoop</groupId>
  3.     <artifactId>hadoop-core</artifactId>
  4.     <version>1.0.4</version>
  5. </dependency>
  6. <dependency>
  7.     <groupId>org.apache.mahout</groupId>
  8.     <artifactId>mahout-core</artifactId>
  9.     <version>0.5</version>
  10. </dependency>
  11. <dependency>
  12.     <groupId>org.apache.mahout</groupId>
  13.     <artifactId>mahout-utils</artifactId>
  14.     <version>0.5</version>
  15. </dependency>
  16. <dependency>
  17.     <groupId>org.apache.mahout</groupId>
  18.     <artifactId>mahout-math</artifactId>
  19.     <version>0.5</version>
  20. </dependency>
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条