【问题标题】:Troubles running Mahout 0.9 text-processing examples运行 Mahout 0.9 文本处理示例的问题
【发布时间】:2023-03-26 18:37:01
【问题描述】:

TL/DRmahout 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 的代码。

我是否遗漏了什么,或者 mahout 提供的示例不适合 Hadoop 2.4 集群?

【问题讨论】:

    标签: java hadoop mahout


    【解决方案1】:

    问题是因为对象 TaskAttemptContext 是 Hadoop 2.4 版中的一个接口,而作业需要一个类(Hadoop 1.1.2 版)。 TaskAttemptContext 在 2.0 版中已更改。

    【讨论】:

    • 这是否意味着无法在 hadoop2 集群上执行 mahout 示例?奇怪的是,这个问题应该是通过-Dhadoop2.version=2.4.1来解决的。
    • 这里的问题是类CombineFileRecordReader在类TaskAttemptContext的方法initNextRecordReader中创建了一个实例但是在2.4版本中它是一个接口,所以如果你想使用版本Hadoop 2.4,必须重写mahout。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-11
    • 2015-04-07
    • 1970-01-01
    • 1970-01-01
    • 2014-12-23
    • 2014-07-12
    • 1970-01-01
    相关资源
    最近更新 更多