0

组合器适合的用例是什么,组合器不适合的用例是什么。我知道组合器的功能,但我试图了解组合器有意义的不同用例。

4

3 回答 3

0

处理以下文件时,字数示例的法线贴图输出为
file1:
这是一本书
,这是一个书架

Map o/p :
this 1
is 1
a 1
book 1
this 1
is 1
a 1
书架 1

现在为了避免网络中如此巨大的数据传输,使用了combiner,这是一个普通的reducer代码,所以如果我们编写自定义combiner,map o/p将是:

这个 1,1
是 1,1
一个 1,1
书 1
书架 1

因此网络中向reducer节点传输的数据更少。

2.关于降低性能:现在在上面的例子中,如果文件中的总行非常大,那么为了避免大数据传输组合器是有用的,但是如果它的总行数仅为 2,那么组合器将增加其执行开销。

于 2015-11-02T17:29:55.913 回答
0

组合器主要用于减少需要由 Reducer 处理的数据量。它们被称为迷你减速器。

一个更好地解释的用例:

Mapper的输出,在没有Combiner的情况下输入到Reducer

<What,1> <do,1> <you,1> <mean,1> <by,1> <Object,1>
<What,1> <do,1> <you,1> <know,1> <about,1> <Java,1>
<What,1> <is,1> <Java,1> <Virtual,1> <Machine,1>
<How,1> <Java,1> <enabled,1> <High,1> <Performance,1>

Mapper -> Combiner的输出,使用Combiner函数输入到Reducer

<What,1,1,1> <do,1,1> <you,1,1> <mean,1> <by,1> <Object,1>
<know,1> <about,1> <Java,1,1,1>
<is,1> <Virtual,1> <Machine,1>
<How,1> <enabled,1> <High,1> <Performance,1>

即使在这个小例子中,您也可以清楚地看到使用组合器减少了数据传输量。想象一下百万字和 TB 数据的场景,您可以看到巨大的网络带宽节省。

何时使用组合器?

  1. 您可以使用Combiner 进行字数统计示例。

    组合器只能用于可交换 (ab = ba) 和关联(a.(bc) = (ab).c)的函数。

什么时候不应该使用Combiner?

简单的。如果上述情况无效。例如,用员工列表中的平均(平均)年龄计算替换字数示例。如果您将 Mapper 中的所有值传递给 Reducer,您将获得不同的平均年龄。如果您从各个映射器发送数据子集,您将获得不同的平均年龄。

可以在这里检查Combiner和Reducer之间的差异

什么时候不使用组合器可以在这里检查

于 2015-11-03T11:24:55.117 回答
0

资料来源:Hadoop 权威指南:

运行 combiner 函数可以得到更紧凑的 map 输出,因此写入本地磁盘和传输到 reducer 的数据更少。

如果只有一两次溢出,则映射输出大小的潜在减少不值得调用组合器的开销,因此不会针对此映射输出再次运行它。

什么是溢出:每个映射任务都有一个循环内存缓冲区,它将输出写入。当缓冲区的内容达到某个阈值大小(80%)时,后台线程将开始将内容溢出到磁盘。

如果组合器符合标准(交换和关联),IMO 总是运行组合器。Hadoop 框架将决定是否运行组合器(基于映射输出大小/没有溢出。)因此您不必担心性能降低。

于 2015-11-02T16:36:30.240 回答