繁体   English   中英

映射器和组合器中的不同键

[英]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:

  • 映射器输出:文本,文本
  • 组合器:文字,文字。 可以使用NullWritable作为组合器输出键。
  • 减速器输入:文本,文本

Hadoop确实使用了Combiner来优化处理,但不保证Combiner的执行。 因此,您无法假设这一点,Hadoop可以将地图输出数据直接发送到Reducer阶段。

有关此问题的讨论,我建议阅读本书的第3章。 在PDF文件的第48页中,对该问题进行注释。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM