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