从命令行运行Mahout(CLASSPATH)

时间:2010-08-26 01:40:55

标签: java classpath mahout

使用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 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分: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引用说它在启动时打包了lib。

答案 2 :(得分:0)

我所做的是用我的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/象夫/象夫集成-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中包含你的所有罐子和mahout罐子然后你可以用

运行你的类

hadoop <classname>