从命令行(CLASSPATH)运行Mahout

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类的包。 javadoc

谢谢大家。

p.s - 在提问之前,我先查看了以前关于CLASSPATH的stackoverflow问题,并按照给定的解决方案进行了操作。

3个回答

1

1
谢谢你的答复。 我在这个链接中没有看到任何类路径的解释。 我确实指定了文件夹"examples\target\classes\org\apache\mahout\cf\taste\example\grouplens"。示例模块中是否还有其他类文件? 但它仍然给出相同的结果——抱怨GroupLensRecommenderEvaluatorRunner,而不是找不到其类文件的其他内容。我会继续尝试,并且如果没有效果,我会将问题发布到用户列表中。再次感谢... - user431336

1
如果您将$MAHOUT_HOME/examples/target/classes放在Java CLASSPATH中(如Sean所提到的),这将在本地运行时起作用,但您可能需要尝试下面的方法来进行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参考所说,它会在启动时打包libs。


这通常是正确的,Pat,尽管问题中涉及的代码实际上与Hadoop无关。 - Sean Owen

0
我所做的是将HADOOP_CLASSPATH设置为我的jar包和所有mahout jar文件,如下所示。

export 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。
因此,您必须将所有的Jars和mahout jar包包含在HADOOP_CLASSPATH中,然后您可以使用hadoop 命令运行您的类。

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