首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Apache hadoop组合器

Apache hadoop组合器
EN

Stack Overflow用户
提问于 2015-11-02 17:29:56
回答 3查看 321关注 0票数 0

哪些用例适合合并器,哪些用例不适合合并器。我知道组合器的功能,但我正在尝试理解组合器有意义的不同用例。

EN

回答 3

Stack Overflow用户

发布于 2015-11-03 00:36:30

来源: Hadoop权威指南:

运行组合器函数有助于更紧凑的映射输出,因此写入本地磁盘和传输到reducer的数据更少。

如果只有一个或两个溢出,那么map输出大小的潜在减少就不值得调用组合器的开销,因此不会为这个map输出再次运行它。

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

如果合并器符合条件(交换式和结合式),则IMO始终运行组合器。Hadoop框架将决定是否运行组合器(基于map输出大小/溢出数量)。因此,您不必担心性能下降。

票数 0
EN

Stack Overflow用户

发布于 2015-11-03 01:29:56

处理以下文件时,字数统计示例的法线映射输出为

file1 :

但这是一本书啊

这是一个书架

地图o/p :

这个1

是1

A 1

第1册

这个1

是1

A 1

书架1

现在为了避免在网络上进行如此巨大的数据传输,使用了组合器,这是一个普通的精简代码,所以如果我们要编写自定义的组合器,映射o/p将是:

这个1,1

是1,1

1,1

第1册

书架1

因此在网络中传输到reducer节点的数据较少。

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

票数 0
EN

Stack Overflow用户

发布于 2015-11-03 19:24:55

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

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

映射器的输出,在没有组合器的情况下输入到减速器

代码语言:javascript
运行
复制
<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>

映射器->组合器的输出,通过组合器函数输入到Reducer

代码语言:javascript
运行
复制
<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>

即使在这个小示例中,您也可以明显地看到使用组合器减少了数据传输量。想象一下这样的场景:百万字,the字节的数据,你可以看到巨大的网络带宽节省。

何时使用组合器?

  1. 你可以使用组合器进行字数统计的例子。

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

不应该使用组合器的时候使用

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

组合器和缩减器之间的差异可以通过here

当不使用组合器时,可以检查here

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33474456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档