java - 线程 "main"java.lang.IncompatibleClassChangeError : Found interface org. apache.hadoop.mapreduce.JobContext 中的异常,但需要类

标签 java hadoop mahout cloudera-cdh mahout-recommender

我正在尝试运行 Mahout in Action 中提供的示例为推荐。我运行的命令是

hadoop jar mahout-core-0.9-job.jar org.apache.mahout.cf.taste.hadoop.item.RecommenderJob -Dmapred.input.dir=gru/links-simple-sorted.txt -Dmapred.output.dir=output --usersFile gru/users.txt --booleanData -s SIMILARITY_COOCCURRENCE

我得到的错误是
15/01/31 21:05:23 INFO common.AbstractJob: Command line arguments: {--booleanData=[false], --endPhase=[2147483647], --maxPrefsInItemSimilarity=[500], --maxPrefsPerUser=[10], --maxSimilaritiesPerItem=[100], --minPrefsPerUser=[1], --numRecommendations=[10], --similarityClassname=[SIMILARITY_COOCCURRENCE], --startPhase=[0], --tempDir=[temp], --usersFile=[gru/users.txt]}
15/01/31 21:05:23 INFO common.AbstractJob: Command line arguments: {--booleanData=[false], --endPhase=[2147483647], --input=[gru/links-simple-sorted.txt], --minPrefsPerUser=[1], --output=[temp/preparePreferenceMatrix], --ratingShift=[0.0], --startPhase=[0], --tempDir=[temp]}
15/01/31 21:05:23 INFO Configuration.deprecation: mapred.input.dir is deprecated. Instead, use mapreduce.input.fileinputformat.inputdir
15/01/31 21:05:23 INFO Configuration.deprecation: mapred.compress.map.output is deprecated. Instead, use mapreduce.map.output.compress
15/01/31 21:05:23 INFO Configuration.deprecation: mapred.output.dir is deprecated. Instead, use mapreduce.output.fileoutputformat.outputdir
Exception in thread "main" 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)
    at org.apache.mahout.cf.taste.hadoop.item.RecommenderJob.run(RecommenderJob.java:164)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
    at org.apache.mahout.cf.taste.hadoop.item.RecommenderJob.main(RecommenderJob.java:322)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:212)

我读到了这个错误,我理解的是 Hadoop 的那个版本。和 classes I run不兼容,所以我使用了以下版本的 Mahout
$ ls -ltr mahout*
-rw------- 1 me guest 11359832 Jan 31 20:51 mahout-core-0.7-job.jar
-rw------- 1 me guest  8374290 Jan 31 20:56 mahout-core-0.5-job.jar
-rw------- 1 me guest 12831506 Jan 31 21:05 mahout-core-0.9-job.jar

但错误保持不变。

我的 Hadoop版本是
]$ hadoop version
Hadoop 2.5.0-cdh5.2.0
Subversion http://github.com/cloudera/hadoop -r e1f20a08bde76a33b79df026d00a0c91b2298387
Compiled by jenkins on 2014-10-11T21:00Z
Compiled with protoc 2.5.0
From source with checksum 309bccd135b199bdfdd6df5f3f4153d
This command was run using /DCNFS/applications/cdh/5.2/app/hadoop-2.5.0-cdh5.2.0/share/hadoop/common/hadoop-common-2.5.0-cdh5.2.0.jar

我错过了什么?如何解决这个问题?

最佳答案

我所需要的只是一个不同的 mahout 发行版,一个 cloudera 发行版

在我使用下面的 jar 文件后,错误就消失了

mahout-core-0.9-cdh5.2.0-job.jar

关于java - 线程 "main"java.lang.IncompatibleClassChangeError : Found interface org. apache.hadoop.mapreduce.JobContext 中的异常,但需要类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28259691/

相关文章:

java - 将项目从bitbucket导入到本地maven仓库

java - 将大数据存储在字符串中并将其分配给 TextView ?

java - 使用 .net 和 java 中的 jUddi v3

hadoop - 如何从本地 Hadoop 2.6 安装访问 S3/S3n?

java - mahout 中 GenericRecommenderIRStatsEvaluator 的非法精度?

generics - Oracle JDK 和 Eclipse JDT 编译器不同意!哪个编译不正确?不寻常的泛型和推理

Hadoop 设置 ubuntu 名称节点,数据节点不工作-jps

hadoop - 免费提供的真实公共(public)数据

java - 如何追溯这个编译错误?

hadoop - 使用 Mahout/hadoop/HBase 等大数据技术研究和实现推荐系统的好书?