3

使用 Maven 在 Windows 下成功编译 Mahout。

我正在尝试从命令行运行其中一个示例,但我不明白我做错了什么。似乎是一个 CLASSPATH 问题。

假设我想运行 GroupLensRecommenderEvaluatorRunner 示例。我转到其中包含 GroupLensRecommenderEvaluatorRunner.class 文件的文件夹并执行:

java -cp C:/mahout/core/target/classes;. 

org.apache.mahout.cf.taste.example.grouplens.GroupLensRecommenderEvaluatorRunner

它给了我 GroupLensRecommenderEvaluatorRunner 类的 NoClassDefFoundError 异常。

-cp 的路径是否错误?

顺便说一句,对于那些不熟悉 mahout 的人,

org.apache.mahout.cf.taste.example.grouplens

是 GroupLensRecommenderEvaluatorRunner 类的包。 文档

多谢你们。

ps - 在问这个问题之前,我首先查看了之前关于 CLASSPATH 的 stackoverflow 问题并遵循了给定的解决方案。

4

3 回答 3

1

如果你把$MAHOUT_HOME/examples/target/classes它放在java中CLASSPATH(正如肖恩提到的),这将在本地运行时工作,但你可能不得不尝试下面的方法来部署hadoop集群。

我发现以下帖子非常有启发性,说明如何在 mahout/hadoop 的各种配置中获得正确的类。

http://www.cloudera.com/blog/2011/01/how-to-include-third-party-libraries-in-your-map-reduce-job/

mahout 脚本在所有情况下都不接受 hadoop 作业参数(如 --libJar),尽管我希望将来会接受,尤其是在作业的参数是类名的情况下(例如 seq2sparse)。

我要做的就是将我的自定义 jar 复制到$HADOOP_HOME/lib主节点上。显然符号链接不起作用,看来您必须将所需的每个 jar 复制到目录中。

然后不要忘记停止并启动 hadoop,因为正如 cloudera 参考所说,它会在启动时打包库。

于 2012-03-16T22:33:41.233 回答
1

最好在 user@mahout.apache.org 上询问。

您的类路径缺少 Mahout 的示例模块中的已编译代码,该模块是此类所在的位置。

更好的是,看看这个演练:https ://cwiki.apache.org/confluence/display/MAHOUT/Recommender+Documentation

于 2010-08-26T09:24:31.970 回答
0

我所做的是使用我的 jar 和所有 mahout jar 文件设置 HADOOP_CLASSPATH,如下所示。

导出 HADOOP_CLASSPATH=/home/xxx/my.jar:/opt/cloudera/parcels/CDH-4.3.0-1.cdh4.3.0.p0.22/lib/mahout/mahout-core-0.7-cdh4.3.0.jar :/opt/cloudera/parcels/CDH-4.3.0-1.cdh4.3.0.p0.22/lib/mahout/mahout-core-0.7-cdh4.3.0-job.jar:/opt/cloudera/parcels/CDH -4.3.0-1.cdh4.3.0.p0.22/lib/mahout/mahout-examples-0.7-cdh4.3.0.jar:/opt/cloudera/parcels/CDH-4.3.0-1.cdh4.3.0。 p0.22/lib/mahout/mahout-examples-0.7-cdh4.3.0-job.jar:/opt/cloudera/parcels/CDH-4.3.0-1.cdh4.3.0.p0.22/lib/mahout/mahout -integration-0.7-cdh4.3.0.jar:/opt/cloudera/parcels/CDH-4.3.0-1.cdh4.3.0.p0.22/lib/mahout/mahout-math-0.7-cdh4.3.0.jar

然后我能够运行 hadoop com.mycompany.mahout.CSVtoVector iris/nb/iris1.csv iris/nb/data/iris.seq

因此,您必须在 HADOOP_CLASSPATH 中包含所有 jar 和 mahout jar,然后您可以使用

hadoop <classname>

于 2013-09-12T12:59:50.100 回答