0

我在我的 CDH 4.2 发行版上运行任何用 scala 编写的 MR 作业时遇到问题。这条线

context.write(...)

导致错误:找到接口 org.apache.hadoop.mapreduce.TaskInputOutputContext,但在 java 中预计类没有问题。任何人都可以帮忙吗?这是完整的示例:

class MyMapper extends Mapper[Object,Text,Text,IntWritable] {
    val one = new IntWritable(1)
    val word = new Text

    override def map(key:Object, value:Text, context:Mapper[Object,Text,Text,IntWritable]#Context)  {
        context.write(word, one)
    }
}

object WordCount {

    def main(args:Array[String]):Int = {
        val conf = new Configuration()
        val job = new Job(conf, "word count")

        job.setJarByClass(classOf[MyMapper])
        job.setMapperClass(classOf[MyMapper])
        job.setNumReduceTasks(0)
        job.setOutputKeyClass(classOf[Text])
        job.setOutputValueClass(classOf[IntWritable])
        FileInputFormat.addInputPath(job, new Path(args(0)))
        FileOutputFormat.setOutputPath(job, new Path((args(1))))
        if (job.waitForCompletion(true)) 0 else 1
    }

}
4

1 回答 1

0

我以前遇到过这个问题。我的猜测是你编译你的 jar 时引用了一个旧版本/不同版本的 Hadoop,TaskInputOutputContext它是类,但你的集群版本已将它更改为一个接口。如果您编译到与集群运行的 Hadoop 版本相同的版本,则可以避免大量不必要的痛苦。

于 2013-06-06T21:37:51.660 回答