从命令行运行Mahout(CLASSPATH)

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

我试图从命令行运行其中一个示例,但我不知道我做错了什么。 看起来像CLASSPATH问题。

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

java -cp C:/mahout/core/target/classes;. org.apache.mahout.cf.taste.example.grouplens.GroupLensRecommenderEvaluatorRunner 

它为GroupLensRecommenderEvaluatorRunner类提供了NoClassDefFoundErrorexception。

-cp的路径是错误的吗?

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

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

是GroupLensRecommenderEvaluatorRunner类的包。 的javadoc

多谢你们。

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

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

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

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

如果把$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。

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

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公司/包裹/ CDH -4.3.0-1.cdh4.3.0.p0.22 / LIB /象夫/亨利马乌-例子-0.7-cdh4.3.0.jar:/opt/cloudera/parcels/CDH-4.3.0-1.cdh4.3.0。 P0.22 / LIB /象夫/亨利马乌-例子-0.7-cdh4.3.0-job.jar:/opt/cloudera/parcels/CDH-4.3.0-1.cdh4.3.0.p0.22/lib/mahout/mahout – 整合 – 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