运行Mahout 0.9文本处理示例的麻烦

时间:2014-08-04 14:42:55

标签: java hadoop mahout

TL / DR mahout 0.9示例是否与hadoop 2.4兼容?

我的问题:

我想使用Mahout 0.9对一堆文件进行分类。为此,请按照here所述的示例进行操作。

我在Windows上尝试完全原生(即没有cygwin)。我已经处理了一个本地hadoop 2.4.1集群。

我下载了mahout源代码并根据wiki编译了

mvn "-Dhadoop2.version=2.4.1" -DskipTests clean install

然后我尝试使用以下示例执行该示例:

hadoop jar $Env:mahout_home/examples/target/mahout-examples-0.9-job.jar org.apache.mahout.driver.MahoutDriver seqdirectory -i Decomposition -o output 

这一切似乎都有效:我正在获取显示mapreduce作业的日志开始运行。但是,我很快就遇到了以下错误:

Error: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
        at org.apache.hadoop.mapreduce.lib.input.CombineFileRecordReader.initNextRecordReader(CombineFileRecordReader.ja
va:166)
        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:492)
        at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:735)
        at org.apache.hadoop.mapred.MapTask.run(MapTask.java:340)
        at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:167)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:415)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1556)
        at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:162)
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.ja
va:157)
        ... 10 more
Caused by: java.lang.IncompatibleClassChangeError: Found interface org.apache.hadoop.mapreduce.TaskAttemptContext, but c
lass was expected
        at org.apache.mahout.text.WholeFileRecordReader.<init>(WholeFileRecordReader.java:59)
        ... 15 more

根据我发现的各种链接,它似乎来自Hadoop 1.0的代码。

我是否遗漏了某些内容,或者提供了不适合Hadoop 2.4群集的示例?

1 个答案:

答案 0 :(得分:0)

问题是因为对象 TaskAttemptContext 是Hadoop 2.4版本中的一个接口,并且该作业期待一个类(版本1.1.2 Hadoop)。 TaskAttemptContext 已在2.0版中更改。

相关问题