【问题标题】:MapReduce job with identity Mapper fails with "Type mismatch in key from map"具有标识 Mapper 的 MapReduce 作业因“映射中的键类型不匹配”而失败
【发布时间】:2017-07-21 20:10:46
【问题描述】:

只是为了学习基础,我正在尝试创建一个 MapReduce 程序,而不在驱动程序类中定义映射器和减速器,以防万一它使用身份映射器和减速器。如果我只评论减速器但在我评论两者时给出错误,它工作正常。下面是我的驱动程序类代码。请提出建议。

任何帮助将不胜感激。提前致谢!

Job job = Job.getInstance(getConf(), "word count");
job.setJarByClass(WordCountRun.class);

// job.setMapperClass(WordCountMapper.class);
//job.setReducerClass(WordCountReducer.class);  

//job.setNumReduceTasks(0);


job.setOutputKeyClass(Text.class);  

// job.setOutputValueClass(IntWritable.class);
job.setOutputValueClass(Text.class);
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
return job.waitForCompletion(true) ? 0 : 1;

Error Image

【问题讨论】:

    标签: hadoop mapreduce mapper


    【解决方案1】:

    您的代码示例没有调用Job#setInputFormatClass。如果没有明确设置输入格式,则默认InputFormatTextInputFormat

    使用TextInputFormat,输入到映射器的键是LongWritable 实例,表示输入文件中的偏移量。输入到映射器的值是Text

    由于您使用的是身份映射器并且没有指定减速器,因此作业的输出由映射器指定。身份映射器输出输入的任何内容,因此它接收 (LongWritable -> Text) 元组作为输入并输出相同的 (LongWritable -> Text) 元组作为输出。

    您的代码示例中的问题是这一行:

    job.setOutputKeyClass(Text.class);  
    

    这试图指定作业的输出键是Text,但如上所述,该作业的输出键实际上是LongWritable。这会导致您的图像出现错误:

    Error: java.io.IOException: Type mismatch in key from map: expected org.apache.hadoop.io.Text, received org.apache.hadoop.io.LongWritable
    

    如果您删除对Job#setOutputKeyClass 的调用,则该错误将不再发生。

    另一种思考方式是考虑默认 MapReduce 作业有效地执行此操作:

    job.setInputFormatClass(TextInputFormat.class);
    job.setMapperClass(Mapper.class);
    job.setMapOutputKeyClass(LongWritable.class);
    job.setMapOutputValueClass(Text.class);
    job.setPartitionerClass(HashPartitioner.class);
    job.setNumReduceTasks(1);
    job.setReducerClass(Reducer.class);
    job.setOutputKeyClass(LongWritable.class);
    job.setOutputValueClass(Text.class);
    job.setOutputFormatClass(TextOutputFormat.class);
    

    通过调用job.setOutputKeyClass(Text.class),作业提交违反了默认 MapReduce 作业中其他设置的假设。

    【讨论】:

      猜你喜欢
      • 2014-11-21
      • 2014-02-06
      • 1970-01-01
      • 1970-01-01
      • 2020-05-27
      • 2014-06-28
      • 1970-01-01
      • 1970-01-01
      • 2021-12-09
      相关资源
      最近更新 更多