hadoop学习-Mapper和Reducer的输出类型

Mapper过程:Mapper

Reducer过程:Reducer

K1,V1 的类型一般由job.setInputFormatClass()指定,比如job.setInputFormatClass(TextInputFormat.class)等等;

Mapper和Reducer的K2 V2需要保持一致;

Reducer的输出K3 V3 一般由job.setOutputKeyClass(Text.class);job.setOutputValueClass(Text.class);设置

当然这里设置的不仅仅是Reducer的输出类型,同时也设置了Mapper的输出类型。即Mapper和Reducer的输出类型被设置成一样了。

如果想要Mapper和Reducer的输出key或value类型不同,可以通过setMapOutputKeyClass 和 setMapOutputValueClass来设定Mapper的输出key/value对。

举个例子,我写的Mapper类如下:

  static class FetchMapper extends MapperText, LongWritable>{ }

  而Reducer类如下:

  tatic class FetchReducer extends ReducerText, Text> { }

  这时红色部分表明了FetchMapper的输出   ,而 FetchReducer的输出为 。可见v2 和 v3 是不同的。此时如果用下面的设置启动程序的话就会出现Type mismatched 错误:

        job.setInputFormatClass(TextInputFormat.class);
        job.setOutputFormatClass(TextOutputFormat.class);    
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(Text.class);

  而加上红色部分的代码则可以解决这个问题。

      job.setInputFormatClass(TextInputFormat.class);
        job.setOutputFormatClass(TextOutputFormat.class);
        job.setMapOutputValueClass(LongWritable.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(Text.class);


参考资料:

《Hadoop in Action》

http://www.cnblogs.com/keep-fighting/archive/2012/08/23/2653231.html

你可能感兴趣的:(Hadoop,Hadoop)