组合器使用与reducer相同的类和大部分相同的代码。但问题是,它究竟是在排序和洗牌之前调用的,还是在减少之前调用的?如果在排序和洗牌之前。e、 ,在mapper之后,它将如何作为 [key, list<values>] ? 因为这是通过排序和洗牌给出的。如果它是在排序和洗牌后调用的。e、 ,然后输出到合路器 [key, value] 像减速机那么减速机是如何得到输入的呢 [key, list<values>] ?
[key, list<values>]
[key, value]
dxpyg8gm1#
map-reduce框架不会一直调用合并器,即使您编写了自定义合并器。如果溢出数至少为3(默认值),它将调用合并器。您可以配置,组合器需要运行的溢出数可以通过 min.num.splits.for.combine 财产。
min.num.splits.for.combine
jecbmhm32#
实际上,在Map阶段之后,排序和洗牌之前。在map阶段之后,输出将通过管道传输到下一个sort和shuffle阶段,combiner在该sort和shuffle阶段之前进行操作。就像,map->combiner->sort n shuffle->reducer
zmeyuzjn3#
组合器的输出类型必须与Map器的输出类型匹配。hadoop不能保证合并器被应用了多少次,甚至根本不能保证它被应用。如果你的Map延伸 Mapper< K1, V1, K2, V2 > 你的减速机 Reducer< K2, V2, K3, V3 > ,则组合器必须是 Reducer< K2, V2, K2, V2 > . Combiner 应用于与 map 操作。一定是在洗牌之前。参考hadoop文档:当map操作输出其对时,它们在内存中已经可用。出于效率的考虑,有时通过提供一个组合器类来执行reduce类型函数来利用这个事实是有意义的。如果使用组合器,则Map键值对不会立即写入输出。相反,它们将被收集在列表中,每个键值一个列表。当写入了一定数量的键值对时,通过将每个键的所有值传递给组合器的reduce方法并输出组合操作的键值对,就像它们是由原始map操作创建的一样,来刷新该缓冲区。http://wiki.apache.org/hadoop/hadoopmapreduce
Mapper< K1, V1, K2, V2 >
Reducer< K2, V2, K3, V3 >
Reducer< K2, V2, K2, V2 >
Combiner
map
omhiaaxx4#
合路器就像一个预减缩器,它将在Map阶段之后不久应用于排序和洗牌阶段。它将应用在处理map阶段的同一主机上,最大限度地减少下一个处理阶段(排序洗牌和减少)的网络数据传输。由于采用了这种优化的组合器,实际减速器相位的处理负担会更小,性能也会更好。
4条答案
按热度按时间dxpyg8gm1#
map-reduce框架不会一直调用合并器,即使您编写了自定义合并器。如果溢出数至少为3(默认值),它将调用合并器。您可以配置,组合器需要运行的溢出数可以通过
min.num.splits.for.combine
财产。jecbmhm32#
实际上,在Map阶段之后,排序和洗牌之前。在map阶段之后,输出将通过管道传输到下一个sort和shuffle阶段,combiner在该sort和shuffle阶段之前进行操作。就像,map->combiner->sort n shuffle->reducer
zmeyuzjn3#
组合器的输出类型必须与Map器的输出类型匹配。hadoop不能保证合并器被应用了多少次,甚至根本不能保证它被应用。
如果你的Map延伸
Mapper< K1, V1, K2, V2 >
你的减速机Reducer< K2, V2, K3, V3 >
,则组合器必须是Reducer< K2, V2, K2, V2 >
.Combiner
应用于与map
操作。一定是在洗牌之前。参考hadoop文档:
当map操作输出其对时,它们在内存中已经可用。出于效率的考虑,有时通过提供一个组合器类来执行reduce类型函数来利用这个事实是有意义的。如果使用组合器,则Map键值对不会立即写入输出。相反,它们将被收集在列表中,每个键值一个列表。当写入了一定数量的键值对时,通过将每个键的所有值传递给组合器的reduce方法并输出组合操作的键值对,就像它们是由原始map操作创建的一样,来刷新该缓冲区。
http://wiki.apache.org/hadoop/hadoopmapreduce
omhiaaxx4#
合路器就像一个预减缩器,它将在Map阶段之后不久应用于排序和洗牌阶段。
它将应用在处理map阶段的同一主机上,最大限度地减少下一个处理阶段(排序洗牌和减少)的网络数据传输。
由于采用了这种优化的组合器,实际减速器相位的处理负担会更小,性能也会更好。