在hadoop单节点集群中运行mahout 20newsgroups时出错

vsaztqbk  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(400)

我已经配置了hadoop1.2.1单节点集群并安装了mahout 0.8。
节点似乎工作正常。
我试图在运行cnaivebayes分类器的hadoop集群上运行20newsgroups mahout示例。问题是我得到了以下错误:

13/11/12 18:31:46 INFO common.AbstractJob: Command line arguments: {--charset=[UTF-8], --chunkSize=[64], --endPhase=[2147483647], --fileFilterClass=[org.apache.mahout.text.PrefixAdditionFilter], --input=[/tmp/mahout-work-hduser/20news-all], --keyPrefix=[], --method=[mapreduce], --output=[/tmp/mahout-work-hduser/20news-seq], --overwrite=null, --startPhase=[0], --tempDir=[temp]}
Exception in thread "main" java.io.FileNotFoundException: File does not exist: /tmp/mahout-work-hduser/20news-all
    at org.apache.hadoop.hdfs.DistributedFileSystem.getFileStatus(DistributedFileSystem.java:558)
    at org.apache.mahout.text.SequenceFilesFromDirectory.runMapReduce(SequenceFilesFromDirectory.java:140)
    at org.apache.mahout.text.SequenceFilesFromDirectory.run(SequenceFilesFromDirectory.java:89)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:79)
    at org.apache.mahout.text.SequenceFilesFromDirectory.main(SequenceFilesFromDirectory.java:63)
    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:606)
    at org.apache.hadoop.util.ProgramDriver$ProgramDescription.invoke(ProgramDriver.java:68)
    at org.apache.hadoop.util.ProgramDriver.driver(ProgramDriver.java:139)
    at org.apache.mahout.driver.MahoutDriver.main(MahoutDriver.java:194)
    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:606)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:160)

当我检查文件夹的权限时,我得到以下信息:

hduser@fernandoPC:/usr/local/mahout/core/target$ ls -l /tmp/mahout-work-hduser/
total 14136
drwxr-xr-x 22 hduser hadoop     4096 Nov 12 18:31 20news-all
drwxr-xr-x  4 hduser hadoop     4096 Nov 12 18:09 20news-bydate
-rw-r--r--  1 hduser hadoop 14464277 Nov 12 18:09 20news-bydate.tar.gz

当我运行20newsgd分类器时,它工作正常。我认为这是因为它不使用map/reduce任务,所以它甚至没有在hadoop上运行。
我在谷歌上到处找,找不到任何解决办法。
有人有什么想法吗?

oknwwptz

oknwwptz1#

这可能与seqdirectory中的bug(参见mahout-1319)有关,其中“seqdirectory”忽略了“prefixfilter”参数。虽然这应该在mahout 0.9中修复,但您是否可以尝试在classify-20newsgroups.sh中修改以下内容

echo "Creating sequence files from 20newsgroups data"
  ./bin/mahout seqdirectory \
    -i ${WORK_DIR}/20news-all \
    -o ${WORK_DIR}/20news-seq -ow

读作

echo "Creating sequence files from 20newsgroups data"
  ./bin/mahout seqdirectory \
    -i ${WORK_DIR}/20news-all \
    -o ${WORK_DIR}/20news-seq -ow -xm sequential

请试一试。
来源:mahout用户邮件列表档案

cetgtptt

cetgtptt2#

如果在独立模式下运行mahout,则需要设置环境变量mahout\u local。您可以添加一行
mahout\u local=1
对于~/.bashrc文件,执行:source.bashrc
这应该能解决问题。

相关问题