使用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问题,并在提出这个问题之前遵循了给定的解决方案。
答案 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>