【问题标题】:Mahout : Cannot convert into sequence fileMahout:无法转换为序列文件
【发布时间】:2014-04-03 12:59:18
【问题描述】:

我正在尝试将一些文本文件转换为 mahout 序列文件。所以我这样做了

mahout seqdirectory -i inputFolder -o outputFolder

但我总是遇到这个异常

java.lang.Exception: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
    at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:403)
Caused by: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
    at org.apache.hadoop.mapreduce.lib.input.CombineFileRecordReader.initNextRecordReader(CombineFileRecordReader.java:164)
    at org.apache.hadoop.mapreduce.lib.input.CombineFileRecordReader.<init>(CombineFileRecordReader.java:126)
    at org.apache.mahout.text.MultipleTextFileInputFormat.createRecordReader(MultipleTextFileInputFormat.java:43)
    at org.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.<init>(MapTask.java:491)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:734)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:339)
    at org.apache.hadoop.mapred.LocalJobRunner$Job$MapTaskRunnable.run(LocalJobRunner.java:235)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at org.apache.hadoop.mapreduce.lib.input.CombineFileRecordReader.initNextRecordReader(CombineFileRecordReader.java:155)
    ... 11 more
Caused by: java.lang.IncompatibleClassChangeError: Found interface org.apache.hadoop.mapreduce.TaskAttemptContext, but class was expected
    at org.apache.mahout.text.WholeFileRecordReader.<init>(WholeFileRecordReader.java:52)
    ... 16 more

我在 Hadoop 2.2.0 上运行 Mahout 0.8

有什么想法吗?

【问题讨论】:

    标签: java hadoop mapreduce mahout sequencefile


    【解决方案1】:

    前面的答案不正确。 Mahout 0.8 有一个 MapReduce 版本的 seqdirectory,这是一个新特性。 MR 版本中的错误导致您看到的异常。

    要使用 Mahout 0.8 执行 seqdirectory,请通过在命令行中指定 -xm 顺序选项来使用顺序版本。

    mahout seqdirectory -i inputFolder -o outputFolder -xm sequential
    

    如果没有指定,seqdirectory 默认执行 MR 版本。

    此问题已在 Mahout 0.9 中得到修复。

    【讨论】:

    • 是的,你是对的,它终于奏效了,但我也得到了 OutOfMemory 异常。 “线程“主”java.lang.OutOfMemoryError 中的异常:Java 堆空间”
    • 你想做什么?
    • 我正在学习 Mahout Cookbook,我正在尝试做一些练习和示例。现在,我正在尝试将来自 lastfm 的一些文本输入转换为序列文件
    • 如果您可以发布堆栈跟踪信息会有所帮助。
    • @SuneelMarthi:+1 用于解决错误。尝试了整整一周。
    【解决方案2】:

    当我在某处读到 mahout 0.8 与 hadoop 1.2 一起使用时。我只下载了 mahout(它使用 lib/hadoop 中的 hadoop jar)

    【讨论】:

    • 我认为你是对的,因为我用 hadoop 1.2.1 尝试过,它终于奏效了。感谢您的回复!
    • 这与Hadoop版本无关,看看我的回答是什么问题。 @webdev 如果您可以在此处发布之前检查 mahout 用户列表上的事实,这将有所帮助。
    猜你喜欢
    • 2015-02-22
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    • 2015-05-18
    • 2013-07-06
    • 1970-01-01
    • 2012-10-20
    • 1970-01-01
    相关资源
    最近更新 更多