【问题标题】:mahout wont start up. Anything to do with compatible version between hadoop and mahout?mahout 不会启动。 hadoop和mahout之间的兼容版本有什么关系吗?
【发布时间】:2012-07-29 21:46:39
【问题描述】:

我是 hadoop 的新手,并不是说 mahout。我希望有人可以帮助我通过这里.. 已经尝试了 2 天..
我已经运行了一个 hadoop 集群。
我正在使用 hadoop-2.0.0-alpha。
我安装了 mahout (ahout-distribution-0.7) 和 maven-2.2.1 (最新的 maven-3.0.4 不起作用)

现在我只想运行 mahout 来了解它是什么。
我了解到,通过输入“mahout”,它会打印出 mahout 中可用的选项(算法)列表,但是当我输入 mahout 时,它只会给我 Java Exception。

$ [hadoop@localhost bin]$ mahout
MAHOUT_LOCAL is not set; adding HADOOP_CONF_DIR to classpath.
Running on hadoop, using /home/hadoop/hadoop/bin/hadoop and HADOOP_CONF_DIR=/home/hadoop/hadoop/conf
MAHOUT-JOB: /home/hadoop/mahout/examples/target/mahout-examples-0.7-job.jar
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.hadoop.util.ProgramDriver.driver([Ljava/lang/String;)V
    at org.apache.mahout.driver.MahoutDriver.main(MahoutDriver.java:123)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:616)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:208)

根据我在网上搜索的内容,大多数答案都要求我使用较低版本的hadoop,即hadoop-0.20,我的问题现在与我的hadoop版本有关吗?
谢谢。

======== 新编辑 ========

我将 hadoop 版本更改为 hadoop-1.0.3,现在当我输入“mahout”时它可以工作(我的 mahout 是 version7)

但当我尝试运行示例时,它再次失败并出现类似错误..

$ hadoop /home/hadoop/mahout/core/target/mahout-core-0.7-job.jar org.apache.mahout.cf.taste.hadoop.item.RecommenderJob -Dmapred.output.dir=output  -Dmapred.input.dir=input/prefs.txt  --usersFile input/users.txt --similarityClassname SIMILARITY_PEARSON_CORRELATION
Caused by: java.lang.ClassNotFoundException: .home.hadoop.mahout.core.target.mahout-core-0.7-job.jar
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: /home/hadoop/mahout/core/target/mahout-core-0.7-job.jar. Program will exit.

嗯..

【问题讨论】:

  • 我认为你必须在 hadoop 的 lib 文件夹中添加 mahout-core-0.7-job.jar

标签: hadoop mahout


【解决方案1】:

@BinaryNerd 是对的。 Mahout 中有一个错误,详见:

Mahout 0.7 命令行给出了 NoClassDef ProgramDriver 错误,如您问题的第一部分所述。这将在 0.8 中修复,或者您可以按照错误报告中的详细说明编辑您的 bin/mahout 以修复支撑位置。

我在 Cloudera CDH 4.1.2 下使用 mahout 遇到了同样的问题。更换我的 bin/mahout 中的支架修复了它。

【讨论】:

    【解决方案2】:

    是的,如果您想让它工作,您似乎需要使用不同版本的 Hadoop(或从源代码构建最新的 Mahout)。你得到了一个 NoSuchMethodError,所以首先要做的是检查 ProgramDriver 是否在你正在使用的 hadoop 分发中。

    查看各种版本的 API 文档,您可以看到它在 v0.0.20.x 中,但已从较新的版本中删除。

    查看 Mahout 的 JIRA,您可以看到在 7 月 11 日提交了一个与此问题类似的错误,该错误已在 0.8 版中得到修复。

    更新:

    你的命令不应该在 hadoop 命令之后有 jar 吗?比如:

    $ hadoop jar /home/hadoop/mahout/core/target/mahout-core-0.7-job.jar 等等

    【讨论】:

    • 这与您引用的问题无关,尽管听起来很接近。正如你所说,这是一个NoSuchMethodError,它是由版本不匹配引起的。
    • 二进制书呆子,谢谢!我已经用 mahout(mahout-distribution-0.7) 将我的 hadoop 版本更改为 hadoop-1.0.3,这次我可以让 mahout 工作:) 但是......当我运行示例时它仍然失败......跨度>
    • 好消息@Sean Owen。我修改了答案。
    猜你喜欢
    • 2014-01-21
    • 2014-06-23
    • 2015-04-18
    • 2012-07-02
    • 2015-04-15
    • 2011-06-07
    • 2013-03-18
    • 2014-02-03
    • 2013-08-07
    相关资源
    最近更新 更多