mapreduce类中的奇怪错误

 上善若水纯_310 发布于 2022-12-27 10:41

这个错误似乎微不足道,但它不会消失.我定义了以下类:

import java.io.IOException;
import java.util.Iterator;
import java.util.StringTokenizer;

import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapred.FileInputFormat;
import org.apache.hadoop.mapred.FileOutputFormat;
import org.apache.hadoop.mapred.JobClient;
import org.apache.hadoop.mapred.JobConf;
import org.apache.hadoop.mapred.MapReduceBase;
import org.apache.hadoop.mapred.OutputCollector;
import org.apache.hadoop.mapred.Reducer;
import org.apache.hadoop.mapred.Reporter;
import org.apache.hadoop.mapred.TextInputFormat;
import org.apache.hadoop.mapred.TextOutputFormat;
import org.apache.hadoop.mapreduce.Mapper;

public class Anagram_Mapper extends Mapper {

在'main'函数中我试图使用JobConf来启动一个简单的mapreduce:

public static void main(String args[]){
     JobConf conf = new JobConf(Anagram_Mapper.class);
       conf.setJobName("anagram_mapper");

       conf.setOutputKeyClass(Text.class);
       conf.setOutputValueClass(IntWritable.class);

       conf.setMapperClass(Anagram_Mapper.class);
       conf.setCombinerClass(Reduce.class);
       conf.setReducerClass(Reduce.class);

       conf.setInputFormat(TextInputFormat.class);
       conf.setOutputFormat(TextOutputFormat.class);

       FileInputFormat.setInputPaths(conf, new Path(args[0]));
       FileOutputFormat.setOutputPath(conf, new Path(args[1]));

       try {
        JobClient.runJob(conf);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

Eclipse在这一行上抛出一个错误:

conf.setMapperClass(Anagram_Mapper.class);

错误是:

The method setMapperClass(Class) in the type JobConf 
is not applicable for the arguments (Class)

但是,正如你在上面看到的,我的Anagram_Mapper类扩展了Mapper,对吧?所以,我不明白为什么这个错误....

编辑:有人发布在这里,然后收回他们的帖子,但它帮助引导我朝着正确的方向.显然我正在使用:org.apache.hadoop.mapreduce.Mapper

但JobConf.setMapperClass只接受:org.apache.hadoop.mapred.Mapper

现在我对这种差异感到有点困惑,它们似乎基本相同,而且API告诉我它们在Hadoop 2.2.0中都有效,我正在使用的版本....

1 个回答
  • 实际上,您正在将旧mapredAPI与新mapreduceAPI 混合使用.

    基本上Hadoop mapreduce支持两个不兼容的API,您必须决定使用哪个API.我可能会感到困惑,因为他们共享具有相同或相似名称的类.您应该仔细查看您的import语句.

    两种API都可以实现几乎相同的功能.mapred尚未弃用或删除也不会破坏遗留应用程序.mapreduce是相同的API,设计稍好一些.

    如果你要开始一个新项目,我会建议你使用新项目.但这不是什么大问题.简单的解决方法是更改​​您的org.apache.hadoop.mapreduce.Mapperimport语句.

    2022-12-27 10:44 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有