每个 Hadoop 开发人员都知道 Combiner 是优化 mapreduce 的关键,但它是可选的。它可以最小化 bandwidth 并提高 mapreduce 作业性能。这里我的问题是,hadoop 默认情况下会设置许多功能,例如数据局部性问题,但不会将 Combiner 设置为默认值。为什么?这意味着在所有情况下都不推荐组合器?我们什么时候不使用组合器?如果我将其设为默认值,那有什么问题?
Combiner 可以用来防止 reduce 函数既是 commutative 又是 associative。这是因为在以任意顺序随机播放之前,值是在本地组合的。
Commutative - 我们处理值操作的顺序在某种程度上对结果没有影响:
1 + 2 + 3 = 1 + 3 + 2
Associative - 我们处理值操作的顺序在某种程度上对结果没有影响:
(1 + 2) + 3 = 1 + (2 + 3)
所以用combiner e就好了。 G。对于
sum()
操作,但有些操作不起作用。因此,决定组合器是否可用于特定算法始终是程序员的责任。
如果您在作业中设置了组合器,那么 Hadoop 将根据数据决定是否运行组合器。
但是如果你不设置组合器,Hadoop 将不会运行组合器。
当组合器运行时,它会减小输出的大小。因此少量数据将在网络中传输。
combiner和reducer的区别,查看以下链接:
http://blog.optimal.io/3-differences-between-a-mapreduce-combiner-and-reducer/