`
JerryLead
  • 浏览: 76218 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

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. 其实用

[root@master:/opt/mahout-distribution-0.5]# hadoop jar mahout-examples-0.5-job.jar org.apache.mahout.clustering.syntheticcontrol.canopy.Job

这样的方式运行就不会有问题,不过这样不会读取conf下的props文件。

 

还有一个问题没解决,就是将Mahout导入Eclipse后,在mahout-core、mahout-examples、mahout-utils下面的pom.xml里面报错,

<plugin>

        <groupId>org.apache.maven.plugins</groupId>

        <artifactId>maven-antrun-plugin</artifactId>

        <executions>

          <execution>

            <phase>compile</phase>

            <configuration>

              <tasks>

                <copy file="../src/conf/driver.classes.props" tofile="${project.build.directory}/classes/driver.classes.default.props" />

              </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)

不知道如何解决,有达人会的话,请不吝赐教。

0
0
分享到:
评论
3 楼 hitliya 2013-04-11  
请问"将Mahout导入Eclipse后,在mahout-core、mahout-examples、mahout-utils下面的pom.xml里面报错"这个问题你解决了吗 ? 被困惑其中..
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

呵呵,多谢,以前也试过修改环境变量,不过没有你的详细啊。
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

相关推荐

Global site tag (gtag.js) - Google Analytics