【问题标题】:Trouble running RecommenderJob on hadoop在 hadoop 上运行 RecommenderJob 时遇到问题
【发布时间】:2012-03-02 11:29:37
【问题描述】:

在hdfs的输入目录中添加lined-sinple-sorted.txt和users.txt后。

我正在尝试运行以下命令。

hduser@ubuntu:/usr/local/hadoop$ bin/hadoop jar /opt/mahout/core/target/mahout-core-0.7-SNAPSHOT-job.jar org.apache.mahout.cf.taste.hadoop.item.RecommenderJob -Dmapred.input.dir=input/input.txt -Dmapred.output.dir=output --similarityClassname SIMILARITY_PEARSON_CORRELATION --usersFile input/users.txt --booleanData

然后我收到以下错误:

12/03/02 06:17:06 INFO common.AbstractJob: Command line arguments: {--booleanData=[false], --endPhase=[2147483647], --maxPrefsPerUser=[10], --maxPrefsPerUserInItemSimilarity=[1000], --maxSimilaritiesPerItem=[100], --minPrefsPerUser=[1], --numRecommendations=[10], --similarityClassname=[SIMILARITY_PEARSON_CORRELATION], --startPhase=[0], --tempDir=[temp], --usersFile=[input/users.txt]}
12/03/02 06:17:06 INFO common.AbstractJob: Command line arguments: {--booleanData=[false], --endPhase=[2147483647], --input=[input/input.txt], --maxPrefsPerUser=[1000], --minPrefsPerUser=[1], --output=[temp/preparePreferenceMatrix], --ratingShift=[0.0], --startPhase=[0], --tempDir=[temp]}
12/03/02 06:17:07 INFO input.FileInputFormat: Total input paths to process : 1
12/03/02 06:17:08 INFO mapred.JobClient: Running job: job_201203020113_0018
12/03/02 06:17:09 INFO mapred.JobClient:  map 0% reduce 0%
12/03/02 06:17:23 INFO mapred.JobClient: Task Id : attempt_201203020113_0018_m_000000_0, Status : FAILED
java.lang.ArrayIndexOutOfBoundsException: 1

    at org.apache.mahout.cf.taste.hadoop.item.ItemIDIndexMapper.map(ItemIDIndexMapper.java:47)
    at org.apache.mahout.cf.taste.hadoop.item.ItemIDIndexMapper.map(ItemIDIndexMapper.java:31)
    at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:144)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:621)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:305)
    at org.apache.hadoop.mapred.Child.main(Child.java:170)

12/03/02 06:17:29 INFO mapred.JobClient: Task Id : attempt_201203020113_0018_m_000000_1, Status : FAILED
java.lang.ArrayIndexOutOfBoundsException: 1

    at org.apache.mahout.cf.taste.hadoop.item.ItemIDIndexMapper.map(ItemIDIndexMapper.java:47)
    at org.apache.mahout.cf.taste.hadoop.item.ItemIDIndexMapper.map(ItemIDIndexMapper.java:31)
    at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:144)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:621)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:305)
    at org.apache.hadoop.mapred.Child.main(Child.java:170)

12/03/02 06:17:35 INFO mapred.JobClient: Task Id : attempt_201203020113_0018_m_000000_2, Status : FAILED
java.lang.ArrayIndexOutOfBoundsException: 1

    at org.apache.mahout.cf.taste.hadoop.item.ItemIDIndexMapper.map(ItemIDIndexMapper.java:47)
    at org.apache.mahout.cf.taste.hadoop.item.ItemIDIndexMapper.map(ItemIDIndexMapper.java:31)
    at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:144)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:621)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:305)
    at org.apache.hadoop.mapred.Child.main(Child.java:170)

12/03/02 06:17:44 INFO mapred.JobClient: Job complete: job_201203020113_0018
12/03/02 06:17:44 INFO mapred.JobClient: Counters: 3
12/03/02 06:17:44 INFO mapred.JobClient:   Job Counters
12/03/02 06:17:44 INFO mapred.JobClient:     Launched map tasks=4
12/03/02 06:17:44 INFO mapred.JobClient:     Data-local map tasks=4
12/03/02 06:17:44 INFO mapred.JobClient:     Failed map tasks=1
Exception in thread "main" java.io.IOException: Cannot open filename /user/hduser/temp/preparePreferenceMatrix/numUsers.bin
    at org.apache.hadoop.hdfs.DFSClient$DFSInputStream.openInfo(DFSClient.java:1497)
    at org.apache.hadoop.hdfs.DFSClient$DFSInputStream.<init>(DFSClient.java:1488)
    at org.apache.hadoop.hdfs.DFSClient.open(DFSClient.java:376)
    at org.apache.hadoop.hdfs.DistributedFileSystem.open(DistributedFileSystem.java:178)
    at org.apache.hadoop.fs.FileSystem.open(FileSystem.java:356)
    at org.apache.mahout.common.HadoopUtil.readInt(HadoopUtil.java:267)
    at org.apache.mahout.cf.taste.hadoop.item.RecommenderJob.run(RecommenderJob.java:162)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65)
    at org.apache.mahout.cf.taste.hadoop.item.RecommenderJob.main(RecommenderJob.java:293)
    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:156)

我必须做些什么才能摆脱这个错误?(是否可以写命令)

您的帮助将不胜感激。

【问题讨论】:

    标签: hadoop mahout mahout-recommender


    【解决方案1】:

    您的输入格式错误。它需要制表符或逗号分隔。

    【讨论】:

    • 谢谢肖恩。你说的是输入文件(linked-simple-sorted.txt)。或者我是否必须更改我输入的命令。??
    • 输入文件类似于 user_id:(space)item_id 。当尝试将此文件转换为 csv 时。生成 like==> user_id:,item_id1,item_id2。我无法获得解决方案。如何像 ==>user_id:item_id1,item_id2 进行转换。是否可以使用 csv 来运行 RecommenderJob,例如 => user_id,item_id1 user_id,item_id2 user_id,item_id3 user_id,item_id4。
    • Sean 说它可能是逗号分隔的,它是用 csv 运行的吗?或者你的新错误是什么?
    【解决方案2】:

    我遇到了同样的问题,这就是我的工作方式。

    我首先尝试将“:”替换为“,”:

    sed -i 's/: /,/' links-simple-sorted.txt
    

    因为这不起作用,我查阅了文档,似乎文件必须重新格式化:每行必须替换为 1+x 行,每行以用户名开头,然后每行一个链接.:

    awk -F, -v OFS="," '{ user = $1; split($2, links, " "); for (link in links) { print user,links[link]; } }' links-simple-sorted.txt > input.txt
    

    然后我上传了新文件:

    bin/hadoop fs -put input.txt input/input.txt
    

    现在该示例使用上述命令bin/hadoop jar ... 运行。

    【讨论】:

    • 你把我从无数令人沮丧的时刻中拯救出来
    • 输出的部分文件是空的,你知道为什么吗?我的users.txt 有一行3。告诉我
    • 对不起,我无法从这里判断。检查你的 hadoop 日志和计数器是否有任何异常。
    【解决方案3】:

    我也遇到了这个问题,CSV 格式正确,困惑了一段时间。

    最后的问题是我没有注意到文件末尾隐藏了一个空白行。

    希望能帮别人降血压一点。

    【讨论】:

      【解决方案4】:

      我有同样的问题。 我试图从 http://girlincomputerscience.blogspot.in/2010/11/apache-mahout.html

      这是一个输入文件格式问题。一些不可见的字符被复制。

      打开文本编辑器并复制输入文件并删除所有不可见字符并再次保存。

      bin/hadoop fs -put input.txt input/input.txt
      

      文件应该是 tsv 或 csv

      【讨论】:

        猜你喜欢
        • 2014-09-11
        • 1970-01-01
        • 1970-01-01
        • 2012-07-27
        • 2011-12-30
        • 2010-09-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多