[英]Different keys in Mapper & Combiners
在Map-Reduce中,可以在Mappers,Combiners和Reducers之间传播不同类型的键。
例如,如果我有一个映射器(用Java实现),该映射器输出Text,IntWritable作为键/值对。 然后,在组合器中,我将所有输出合并为单个键,并希望将其输出为NullWritable,Text。 然后在Reducer中,我要输出Text,IntWritable。
是否可以做以上类似的事情? 如果没有,为什么?
您可以使用以下方法为映射器和化简器指定不同的键/值类型:
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(IntWritable.class);
和
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
但是您不能为组合器设置不同于映射器的键/值类型。 这是因为组合器仅用于减少将从映射器发送到reducer的数据量。 您应该能够删除没有任何副作用的组合器。 但是,如果您的组合器产生NullWritable, Text
对,而mapper产生Text, IntWritable
对,那么没有组合器,您的程序将失败。
您可以使用Text而不是IntWritable:
Hadoop确实使用了Combiner来优化处理,但不保证Combiner的执行。 因此,您无法假设这一点,Hadoop可以将地图输出数据直接发送到Reducer阶段。
有关此问题的讨论,我建议阅读本书的第3章。 在PDF文件的第48页中,对该问题进行注释。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.