【问题标题】:Conceptual questions about map reduce关于 map reduce 的概念问题
【发布时间】:2014-03-15 00:08:19
【问题描述】:
我一直在阅读有关 Map Reduce 的大量信息,但有以下问题我似乎无法找到答案:
每个人都指向单词计数示例。但是,为什么我们需要 map reduce 范式来获得一个非常大的语料库来计算字数呢?我不确定让一台机器从一个非常大的流中读取并将字数全部保存在内存中比让许多连接的机器在它们之间拆分计数任务并再次聚合它更糟糕。最后,到最后,仍然会有一个地方可以保持所有计数,对吧?
mapper 和 reducer 机器在物理上是否不同?或者映射和归约可以在同一台机器上进行吗?
-
假设我的流是下面三个句子:
a b c
b c d
b c
因此,字数映射器将生成键值对:
a 1
b 1
c 1
b 1
c 1
d 1
b 1
c 1
现在它会将这些键值对传递到下一个阶段,对吧?我有以下问题:
- 下一阶段是减速机吗?
- 映射器可以将第一个 b 1 和第二个 b 1 元组发送到不同的节点吗?如果是,那么计数是否会在下一阶段汇总?如果没有,那为什么不呢?这不是违反直觉吗?
- 最后,在 map reduce 作业结束时,最终输出全部聚合在一台机器上,对吗?如果是,这是否会使整个过程在计算上过于昂贵?
【问题讨论】:
标签:
hadoop
mapreduce
distributed-computing
【解决方案1】:
字数最容易解释,这就是您经常看到它的原因。它已成为 Hadoop 框架的“Hello World”示例。
是的,Map 和 Reduce 可以在同一台机器上或不同的机器上。 Reduce 仅在所有映射完成后才开始。
所有键都转到同一个减速器。
(所以回答你的问题
映射器能否将第一个 b 1 和第二个 b 1 元组发送到不同的节点 --- 否)
而且说整个处理过程很昂贵也是不对的。
由于 Map-Reduce 范式可以处理/解决/分析单台机器几乎不可能处理的问题(它被称为 BIG 数据的原因)。
现在有了 MapReduce,它可以使用商品(读起来更便宜)硬件;这就是为什么被广泛接受的原因。
【解决方案2】:
Map-Reduce (MR) 范式由 Google 创建,Google 正在做字数统计(或者在他们的特殊情况下,他们正在创建倒排索引,但这在概念上非常相似)。您可以将 MR 用于许多事情(并且人们尝试这样做),但它并不是真正有用。事实上,许多公司将 MR 用于特殊版本的字数统计。当 Spotify 分析他们的日志并报告听了哪些歌曲的频率时,它基本上是字数,只有 TB 的日志。
最终结果不仅仅落在 hadoop 中的一台机器上,而是再次出现在分布式的 HDFS 中。而且你可以对该结果执行另一个 MR 算法,...
在 hadoop 中,您有不同类型的节点,但就我们测试过的 MR 而言,所有节点都存储数据以及执行 Map 和 Reduce 作业。直接在存储数据的机器上执行 Map 和 Reduce 作业的原因是局部性,因此降低了网络流量。之后您可以合并缩减的结果并再次缩减它们。
例如当机器 1 有
a b c
机器 2 有
b c d
bc
机器 2 会映射和减少数据并且只发送
b 2
c 2
d 1
通过电线。但是机器2实际上不会将数据发送到任何地方,而是将这个结果作为初步结果保存在HDFS中,其他机器可以访问它。
现在这是 Hadoop 特有的,我认为当您还查看其他使用场景时,它有助于理解 Map-Reduce 范式。 NoSQL 数据库 Couchbase 和 CouchDB 使用 Map-Reduce 创建视图。这意味着您可以分析数据并计算总和、最小值、最大值、计数……这个 MR-Jobs 在此类数据库集群的所有节点上运行,结果再次存储在数据库中,所有这些都无需 Hadoop和 HDFS。