map-reduce 是如何工作的……我做对了吗?
Posted
技术标签:
【中文标题】map-reduce 是如何工作的……我做对了吗?【英文标题】:How does map-reduce work..Did i get it right? 【发布时间】:2018-03-06 14:33:28 【问题描述】:我试图了解 map-reduce 的实际工作原理。请阅读我在下面写的内容,并告诉我这里是否有任何遗漏或不正确的东西。 谢谢你。
数据首先被分割成所谓的输入分割(这是一种逻辑类型的组,我们将其大小定义为记录处理的需要)。 然后,每个输入拆分都有一个 Mapper,它获取每个输入拆分并按键和值对其进行排序。 然后,有一个洗牌过程,它从映射器(键值)中获取所有数据并将所有相同的键与其值合并(输出它是所有键及其值列表)。洗牌过程的发生是为了给 reducer 输入一个 1 的键,用于每种类型的键及其总和值。 然后,Reducer 将所有键值合并到一个地方(可能是页面?),这是 MapReduce 过程的最终结果。 我们只需要确保定义 Map(它总是给出键值的输出)和 Reduce(最终结果 - 获取输入的键值,并且可以是 count、sum、avg 等)步骤代码。
【问题讨论】:
您愿意编辑您的问题以展示您的尝试吗? @Ryan Morton ,我实际上只是想理解这个概念。我看过一个关于计算单词的例子并阅读了一些文章,所以我想确保我得到的一切都是正确的。(我是大数据的新手,hadoop 等)。 【参考方案1】:您的理解略有错误,特别是映射器的工作原理。 我got a very nice pictorial image简单解释一下
它类似于wordcount
程序,其中
InputSplit
,由映射器处理。所以我们有 3 个捆绑包。
每一块巧克力都是一个词。一个或多个单词(造句)是单个映射器的记录输入。因此,在一个inputsplit
内,可能有多个records
,每个record
都输入到单个mapper
。
mapper
计数每个word
(巧克力)的出现并吐出计数。请注意,每个映射器都只处理一个line
(记录)。完成后,它会从inputsplit
中选择下一个record
。 (图片中的第二阶段)
一旦map
阶段完成,sorting
和shuffling
就会发生bucket
相同的巧克力计数。 (图片中的第三阶段)
bucket
,键为name of the chocolate
(或word
)和一个list计数。因此,在整个输入文件中,reducer 的数量与不同的单词数量一样多。
reducer 遍历计数并将它们相加以产生最终计数并针对单词发出。
下图显示了wordcount
中的一个inputsplit
程序的工作原理:
【讨论】:
那么输入拆分只是要减少映射的数据的一部分吗?这意味着每次我对某些数据进行 map reduce 时,可能会有多个输入拆分?考虑到映射器只关心记录的数量,它对我有什么帮助有多个输入拆分.. 是的,在实际场景中;将有超过 1 个inputsplit
。默认情况下,HDFS 将文件分成 256MB 的块(1 GB = 4 个块)。这一个block以inputsplit
的形式输入到一个mapper(但这并不意味着block和inputsplit
相同)。您需要了解blocksize
、inputsplit
以及在mapreduce
中是如何处理的。
我想我现在明白了。我们使用这种称为输入拆分的逻辑大小来确定块的边界,因为块中可能有一半的记录。谢谢老哥!
是的,你没看错。如果有帮助,请为答案投票。
已经做到了。因为我是该网站的新手,所以它说没有显示赞成票,但它仍然算作赞成票。【参考方案2】:
类似的质量检查 - Simple explanation of MapReduce?
另外,这篇文章以非常简单的方式解释了 Hadoop - HDFS 和 Mapreduce https://content.pivotal.io/blog/demystifying-apache-hadoop-in-5-pictures
【讨论】:
以上是关于map-reduce 是如何工作的……我做对了吗?的主要内容,如果未能解决你的问题,请参考以下文章