Mahout-0.5运行时异常处理
很早就装上了mahout-distribution-0.5,结果运行第一个例子Canopy Clustering的时候就报错,在Mahout的官方主页tutorial页面里写了comment,说明了出错的地方,结果没人搭理。
?
运行命令如下:
?
root@master:/opt/mahout-distribution-0.5# bin/mahout org.apache.mahout.clustering.syntheticcontrol.canopy.Job
?
今天碰巧又运行了一下,仔细看了$MAHOUT_HOME/bin/下的mahout脚本,终于找到出错原因。
?
?
在mahout脚本中默认的MAHOUT_CONF_DIR是"$MAHOUT_HOME/src/conf",可是从官方下下来解压后mahout-distribution-0.5的子目录根本没有src(只有源码的压缩包里有,发行版里面没有),倒是有conf,因此这个地方会导致
”WARN driver.MahoutDriver: No org.apache.mahout.clustering.syntheticcontrol.canopy.Job.props found on classpath, will use command-line arguments only“
的错误。
?
修改方法:编辑bin/mahout,找到这一行:
MAHOUT_CONF_DIR=$MAHOUT_HOME/src/conf
?
将其修改为
MAHOUT_CONF_DIR=$MAHOUT_HOME/conf
?
ok,不会报上面那个错了。
?
别高兴太早,接着运行时会报:
Error: java.lang.ClassNotFoundException: org.apache.mahout.math.Vector
?
不是吧,看看经过mahout脚本出来的完整命令如下:
/opt/hadoop-0.20.2/bin/hadoop jar /opt/mahout-distribution-0.5/mahout-examples-0.5-job.jar org.apache.mahout.driver.MahoutDriver org.apache.mahout.clustering.syntheticcontrol.canopy.Job
应该没问题啊,math包里面的Vector也在mahout-examples-0.5-job.jar里面啊,怎么会找不到类呢?
?
凭借长期的Hadoop经验,终于找到原因,原来还在mahout脚本里。
mahout脚本有这么几句:
?
?
if [ $IS_CORE == 0 ]
then
? # add release dependencies to CLASSPATH
? for f in $MAHOUT_HOME/mahout-*.jar; do
? ? CLASSPATH=${CLASSPATH}:$f;
? done
?
?
意思是将mahout-distribution-0.5目录下的所有jar放到CLASSPATH中,然而碰巧mahout-core-0.5.jar排在mahout-examples-0.5-job.jar前面,并且包含类org.apache.mahout.driver.MahoutDriver,因此实际上提交给Hadoop的是mahout-core-0.5.jar,而不是后者。mahout-core-0.5.jar没有Vector类,因此运行时报错。
?
解决方法:运行命令时在mahout后面加上-core,这样上面的语句不会执行,也就没问题了。
root@master:/opt/mahout-distribution-0.5# bin/mahout -core ?org.apache.mahout.clustering.syntheticcontrol.canopy.Job
?
well done,问题解决。
?
P.S. 其实用
? ? ? ? ? ? ? </tasks>
?
? ? ? ? ? ? </configuration>
? ? ? ? ? ? <goals>
? ? ? ? ? ? ? <goal>run</goal>
? ? ? ? ? ? </goals>
? ? ? ? ? </execution>
? ? ? ? </executions>
? ? ? </plugin>
错误为:
Plugin execution not covered by lifecycle configuration: org.apache.maven.plugins:maven-antrun-plugin:1.6:run (execution: default, phase: compile)
不知道如何解决,有达人会的话,请不吝赐教。
1 楼 hongst 2011-10-19 刚好遇到一样的错误,可以通过添加环境变量的方法解决:export MAHOUT_HOME=$HOME/mahout
export MAHOUT_BIN=$MAHOUT_HOME/bin
export MAHOUT_CONF_DIR=$MAHOUT_HOME/conf
export MAHOUT_CORE=yes
export PATH=$MAHOUT_BIN:$PATH 2 楼 JerryLead 2011-10-19 hongst 写道刚好遇到一样的错误,可以通过添加环境变量的方法解决:
export MAHOUT_HOME=$HOME/mahout
export MAHOUT_BIN=$MAHOUT_HOME/bin
export MAHOUT_CONF_DIR=$MAHOUT_HOME/conf
export MAHOUT_CORE=yes
export PATH=$MAHOUT_BIN:$PATH
呵呵,多谢,以前也试过修改环境变量,不过没有你的详细啊。