2015-11-02 45 views
0

组合器适用的用例和组合器不适用的用例有哪些。我知道组合器的功能,但我想了解组合器有意义的不同用例。Apache hadoop组合器

+5

看一看这个问题:http://stackoverflow.com/questions/33406566/combiner -inplementation和内部加工/ 33408776#33408776 –

回答

0

源:Hadoop的明确指导:

运行组合器功能使得更紧凑的地图输出,所以有较少的数据写入到本地磁盘和转移到减速机。

如果只有一个或两个溢出,地图输出大小的潜在减少不值得调用组合器的开销,所以它不会再为该地图输出运行。

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

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

0

普通地图输出字数例如在处理文件以下是
file1的:
这是一本书
这是一个书架

地图O/P:
这个1
是1
a 1
book 1
th是1
是1
1个
书架为了避免这样的在网络中的庞大的数据传输1

现在,组合器被使用,这是一种正常减速码,因此,如果我们将自定义写入组合器的地图O/p将是:

此1,1
是1,1-
1,1-
书1
书架1

这样减少了网络中数据传输到reducer节点。

2.关于降低性能:现在如果在文件中的总线是非常大的,而不是避免大的数据传送组合是有用的,但如果其仅总线是2,比组合器将添加上述示例它的执行开销。

0

合并器主要用于减少Reducers需要处理的数据量。他们被称为迷你减速器。

一个用例,以更好地解释:

输出从映射器输入到减速在没有合的

<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> 

输出从映射器 - >合,其输入到减速器组合器功能

<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> 

即使在这个小例子中,您可以明显看到使用组合器的数据传输减少量。想象一下具有万亿字节数据的万字的情景,您可以看到巨大的网络带宽节省。

何时使用组合器?

  1. 您可以使用Combiner作为字数统计的例子。

    组合器只能在是可交换 (A·B = b.a)和关联的功能可以使用(一个。(b.c)=(A·B).c)中

当你不应该使用Combiner?

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

合和减速机之间的差异,可以检查here

当不使用合成器可以检查here

相关问题