如何在Hadoop 2.0上编译/使用Mahout?

4
最新发布的Mahout 0.9 只支持基于Hadoop 1.x版本(mvn clean install)。如果要编译Mahout以支持Hadoop 2.0.x,您该怎么做呢?
因为当我运行以下命令时:
hadoop jar mahout-examples-0.9-SNAPSHOT-job.jar org.apache.mahout.cf.taste.hadoop.item.RecommenderJob -s SIMILARITY_COOCCURENCE -i test -o result
我总是收到错误消息:
IncompatibleClassChangeError: Found interface org.apache.hadoop.mapreduce.JobContext, but class was expected.
谢谢!
3个回答

1
为了使Mahout能够与2.x兼容,需要进行编译,因为它没有发布与Hadoop 2.x兼容的软件包。
mvn clean install -Dhadoop2 -Dhadoop2.version=2.2.0 -DskipTests=true

如果您想在构建后确认正确的依赖项已被引入,请从项目根目录运行以下命令:
find . -name hadoop*.jar

上述命令生成的构件与0.9版本中的不同,因此您需要更新的不仅仅是版本号(看起来似乎有一个新的mahout-mrlegacy jar文件)。
话虽如此,如果有人能够指向一个在2.x下运行的官方构件(即使是SNAPSHOT),我会很感激。

使用Mahout与Hadoop 2.x有多聪明和必要?谢谢。 - Kobe-Wan Kenobi

0
大约一个小时前,Mahout在主分支上正式添加了对Hadoop 2.x的支持(请参见MAHOUT-1329)。
在此处检出代码https://github.com/apache/mahout并重新编译:
mvn clean package -Dhadoop2.version=2.2.0

试一下,看看是否有效。


0

你尝试过在pom.xml中更改hadoop的版本吗?

<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-core</artifactId>                                                   
<version> 0.23.9</version> 

请检查Hadoop的版本。据我了解,0.23已经变成了2.0。
另一个尝试的方法是直接运行RecommenderJob,像这样:
bin/mahout recommenditembased \
   --input INPUT --output OUTPUT \
   --tempDir TEMP --similarityClassname SIMILARITY_LOGLIKELIHOOD

要运行此程序,您必须在mahout文件夹的根目录中,并且需要设置以下环境变量:

export HADOOP_HOME=/path/to/hadoop/home
export HADOOP_COMMONS_HOME=/path/to/commons/home
export JAVA_HOME=/path/to/java/home
export PATH="$PATH:$HADOOP_HOME/bin"

谢谢!<br/>我在Maven网站上搜索了Hadoop的版本信息,但是我发现该版本没有0.23.9或2.0.0。http://search.maven.org/#browse%7C-1554017732 我需要在集群上进行实验以测试集群性能,因此非分布式推荐系统可能不适合我。 - kokosy
你尝试过我的第二个建议了吗?从你的机器上运行Mahout而不是作为Hadoop jar包?我总是这样运行它,而且没有遇到任何问题。 - Dragan Milcevski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接