当我们不在Mapreduce中使用Combiner时?

Ven*_*ive 0 hadoop mapreduce

每个Hadoop开发人员都知道Combiner是优化mapreduce的关键,但是它是可选的。它可以最小化带宽并提高mapreduce作业的性能。在这里,我的问题是,hadoop会将许多功能默认设置为数据局部性问题,而不是将Combiner设置为默认值。为什么?这意味着在所有情况下都不推荐使用合并器吗?什么时候不使用组合器?如果我将其设置为默认值,会有什么问题?

van*_*jar 5

如果reduce函数既是可交换的又是关联的,则可以使用Combiner 。这是因为值在随机排序之前在本地进行了组合。


可交换的 -根据值处理操作的顺序在某种程度上对结果没有影响:

1 + 2 + 3 = 1 + 3 + 2

关联 -我们根据值处理操作的顺序在某种程度上对结果没有影响:

(1 + 2)+ 3 = 1 +(2 + 3)

因此,最好使用合并器进行sum()操作,但是有些操作对它不起作用。因此,决定组合器是否可用于特定算法始终是程序员的责任。