这个问题在这里已经有答案了:
合路器实施和内部工作(3个答案)5年前关门了。什么是合路器合适的用例,什么是合路器不合适的用例。我知道合路器的功能,但我试图理解合路器有意义的不同用例。
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绘制者那里发送数据子集,你会得到不同的平均年龄。合路器和减速机之间的区别可以在这里和不使用合路器时可在此处查看
kcrjzv8t2#
处理以下文件时字数计数示例的正常Map输出为文件1:这是一本书这是一个书架Mapo/p:这个1是1a 1级第一册这个1是1a 1级书架1现在为了避免网络中如此巨大的数据传输,使用了combiner,这是一个普通的reducer代码,因此如果我们要编写自定义combiner,那么map o/p将是:这个1,1是1,1a 1,1第一册书架1从而减少了数据在网络中向reducer节点的传输。2.关于性能下降:现在在上面的例子中如果文件中的总行非常大,比避免大数据传输合路器是有用的,但是如果它的总行数只有2,比合路器会增加它的执行开销。
wfypjpf43#
来源:hadoop权威指南:运行combiner函数可以获得更紧凑的map输出,因此要写入本地磁盘和传输到reducer的数据更少。如果只有一个或两个溢出,Map输出大小的潜在减少不值得调用合并器的开销,因此不会再次为此Map输出运行。溢出:每个map任务都有一个循环内存缓冲区,它将输出写入其中。当缓冲区的内容达到某个阈值大小(80%)时,后台线程将开始将内容溢出到磁盘。如果合路器符合标准(交换的和结合的),imo总是运行合路器。hadoop框架将决定是否运行combiner(基于map输出大小/溢出数),因此您不必担心性能降低。
3条答案
按热度按时间gijlo24d1#
合并器主要用于减少需要由还原器处理的数据量。它们被称为微型减速器。
一个更好地解释的用例:
来自Map器的输出,在没有合并器的情况下输入到减速机
从mapper->combiner输出,通过combiner功能输入到reducer
即使在这个小例子中,使用combiner也可以明显地看到数据传输量的减少。想象一下,百万字和万亿字节的数据,你可以看到巨大的网络带宽节省。
何时使用合路器?
您可以将组合器用于字数计算示例。
组合器只能用于交换函数(a.b=b.a)和结合函数(a.(b.c)=(a.b.c)。
什么时候不用合路器?
很简单。如果上述情况无效。e、 g.将单词计数示例替换为员工列表中平均(平均)年龄的计算。如果您将所有值从mapper传递到reducer,您将得到不同的平均年龄。如果你从各个Map绘制者那里发送数据子集,你会得到不同的平均年龄。
合路器和减速机之间的区别可以在这里和
不使用合路器时可在此处查看
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,比合路器会增加它的执行开销。
wfypjpf43#
来源:hadoop权威指南:
运行combiner函数可以获得更紧凑的map输出,因此要写入本地磁盘和传输到reducer的数据更少。
如果只有一个或两个溢出,Map输出大小的潜在减少不值得调用合并器的开销,因此不会再次为此Map输出运行。
溢出:每个map任务都有一个循环内存缓冲区,它将输出写入其中。当缓冲区的内容达到某个阈值大小(80%)时,后台线程将开始将内容溢出到磁盘。
如果合路器符合标准(交换的和结合的),imo总是运行合路器。hadoop框架将决定是否运行combiner(基于map输出大小/溢出数),因此您不必担心性能降低。