apache hadoop组合器

snz8szmq  于 2021-06-03  发布在  Hadoop
关注(0)|答案(3)|浏览(423)

这个问题在这里已经有答案了

合路器实施和内部工作(3个答案)
5年前关门了。
什么是合路器合适的用例,什么是合路器不合适的用例。我知道合路器的功能,但我试图理解合路器有意义的不同用例。

gijlo24d

gijlo24d1#

合并器主要用于减少需要由还原器处理的数据量。它们被称为微型减速器。
一个更好地解释的用例:
来自Map器的输出,在没有合并器的情况下输入到减速机

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

即使在这个小例子中,使用combiner也可以明显地看到数据传输量的减少。想象一下,百万字和万亿字节的数据,你可以看到巨大的网络带宽节省。
何时使用合路器?
您可以将组合器用于字数计算示例。
组合器只能用于交换函数(a.b=b.a)和结合函数(a.(b.c)=(a.b.c)。
什么时候不用合路器?
很简单。如果上述情况无效。e、 g.将单词计数示例替换为员工列表中平均(平均)年龄的计算。如果您将所有值从mapper传递到reducer,您将得到不同的平均年龄。如果你从各个Map绘制者那里发送数据子集,你会得到不同的平均年龄。
合路器和减速机之间的区别可以在这里和
不使用合路器时可在此处查看

kcrjzv8t

kcrjzv8t2#

处理以下文件时字数计数示例的正常Map输出为
文件1:
这是一本书
这是一个书架
Mapo/p:
这个1
是1
a 1级
第一册
这个1
是1
a 1级
书架1
现在为了避免网络中如此巨大的数据传输,使用了combiner,这是一个普通的reducer代码,因此如果我们要编写自定义combiner,那么map o/p将是:
这个1,1
是1,1
a 1,1
第一册
书架1
从而减少了数据在网络中向reducer节点的传输。
2.关于性能下降:现在在上面的例子中如果文件中的总行非常大,比避免大数据传输合路器是有用的,但是如果它的总行数只有2,比合路器会增加它的执行开销。

wfypjpf4

wfypjpf43#

来源:hadoop权威指南:
运行combiner函数可以获得更紧凑的map输出,因此要写入本地磁盘和传输到reducer的数据更少。
如果只有一个或两个溢出,Map输出大小的潜在减少不值得调用合并器的开销,因此不会再次为此Map输出运行。
溢出:每个map任务都有一个循环内存缓冲区,它将输出写入其中。当缓冲区的内容达到某个阈值大小(80%)时,后台线程将开始将内容溢出到磁盘。
如果合路器符合标准(交换的和结合的),imo总是运行合路器。hadoop框架将决定是否运行combiner(基于map输出大小/溢出数),因此您不必担心性能降低。

相关问题