当前位置: 首页 > 知识库问答 >
问题:

MapReduce中是合并先发生还是合并先发生

皇甫俊雅
2023-03-14

考虑一个MapReduce程序的WordCount问题。

让我们考虑一下映射器的输出如下:Hello 1 World 1 Hello 1 Hadoop 1 Hello 1Hadoop1

它去了分区器(我们将2指定为缩减器的no,)现在mapout在2个部分part1中获取分区:
Hello 1
Hello 1
Hello 1
Hello 1

Part 2:世界1 Hadoop 1 Hadoop 1

因为在reducer:我们得到的输入是Hello [1,1,1]

世界[1]

Hadoop[1,1]

请澄清我对价值合并的理解。对于MapReduce:K1,V1-

我的查询是当值合并发生时,在合并器执行之前或合并器执行之后(在排序和洗牌期间)。或者值合并发生在将输入提供给减速器级别的减速器之前。

因为根据我的理解:映射器输出首先进入内存,当它超过mapreduce.task.io.sort.mb的阈值时,它会溢出到本地磁盘,但在溢出之前,数据会按分区排序,在每个分区内,在调用排序组合器以减小大小后,它会按键排序。映射器完成后,将合并溢出文件,并根据min.num.spips.for调用合并器。结合价值。

因为,在字数计算问题中,缩减器对每个特定键的所有iterable值进行累加,并写入输出键和值之和。

由于Combiner是mini reducer,我们为Combiner job . setcombinerclass(reduce . class)指定了相同的reducer类;< br >那么在排序和洗牌时,在合并之前调用合并器是有价值的,否则我的理解是不正确的。请澄清我

共有1个答案

长孙哲
2023-03-14

映射器开始将输出存储在缓冲区中,当缓冲区已满时,在数据溢出到磁盘之前,将执行合并器,尝试减少数据量。

组合器可以执行0次(如果映射器输出数据量小于缓冲区大小)或1-N次,具体取决于数据量。

您的流程不应该依赖于组合器,组合器只是一个可选的优化,用于减少网络从映射器传输到缩减器的数据量。

上一个合并器调用的结果可以再次与最后一个数据合并。您需要保证组合器的输入和输出兼容。并且合路器的输出应与减速器的输入兼容。

合并器类似于局部化简器,在数据被洗牌并传输到化简器之前,它仅合并一个映射器的数据。

 类似资料:
  • 问题内容: 我试着用两个类来做图像分类。我有1000张照片 均衡的班级。当我训练模型时,我得到一个低常数的验证 准确性,但验证损失减少。这是一个过度装修的迹象还是 不合身?我还应该注意到,我正在尝试重新训练《盗梦空间》 具有新类和不同数据集的V3模型。 问题答案: 什么是过度装配 过度拟合(或欠拟合)发生在模型过于特定(或不特定)时 足够具体)的训练数据,并不能很好地推断出 真域。从现在起,我只想

  • git rebase 这个命令经常被人认为是一种 Git 巫术,初学者应该避而远之。但如果使用得当的话,它能给你的团队开发省去太多烦恼。在这篇文章中,我们会比较 git rebase 和类似的 git merge 命令,找到 Git 工作流中 rebase 的所有用法。 概述 你要知道的第一件事是,git rebase 和git merge 做的事其实是一样的。它们都被设计来将一个分支的更改并入另

  • 我想在Redis中实现一个并发优先级队列,不同机器上的多个进程添加项目(带分数),多个其他进程弹出这些项目,最先得分。 可以使用LPUSH和RPOP实现简单队列。 使用ZSET,我可以使用ZADD添加项目,并使用ZRANGE和ZREM弹出它们,只要只有一个读取器。 对于多个读者,我想我需要像ZPOP这样的东西,它将ZRANGE和ZREM结合在一个原子操作中。否则,两个阅读器可能会在ZREM之前从Z

  • 合并器在映射器之后、缩减器之前运行,它将接收由给定节点上的映射器实例发出的所有数据作为输入。然后输出到减速器。 而且,如果一个化简函数既是可交换的又是结合的,那么它可以用作组合器。 我的问题是,在这种情况下,“交换和结合”这个短语是什么意思?

  • 我正在使用git跟踪对LaTeX文档的更改。我倾向于将合著者的反馈保存在一个单独的分支中,并在以后将其合并。到目前为止,事情似乎神奇地正确地合并了,但我想知道合并冲突何时发生,这样我就可以在合并过程中获得一些真正的信任(当然我不希望文本出现问题)。 关于StackOverflow,有许多问题似乎问了同样的问题,但没有一个答案是非常具体的。例如,这个答案指定如果对同一个区域进行更改,就会发生冲突,但

  • 因此它显然给出了一个明显的合并错误: 建议“将'tools:replace=”android:authorities“‘添加到androidmanifest.xml的元素以覆盖”。 所以我在应用程序的AndroidManifest.xml中添加了: