关于地图缩减的概念性问题



我读了很多关于Map Reduce的书,我有以下问题,我似乎找不到答案:

  1. 每个人都指向单词计数的例子。但是为什么我们需要map reduce范式来处理一个非常大的语料库呢?我不确定让一台机器从一个非常大的流中读取并在内存中维护单词计数,怎么会比让许多连接的机器在它们自己之间分配计数任务并再次聚合它更糟糕。最后,在最后,仍然会有一个地方保留所有的计数,对吗?

  2. 映射机和减速机在物理上不同吗?或者映射和约简可以在同一台机器上进行吗?

  3. 假设我的流是以下三个句子:

    a b c
    b c d
    b c
    

    因此,单词计数映射器将生成键值对:

a 1
b 1
c 1
b 1
c 1
d 1
b 1
c 1

现在它将这些键值对传递到下一个阶段,对吧?我有以下问题:-下一阶段是减速器吗?映射器可以发送第一个b1和第二个b1元组到不同的节点吗?如果是,那么计数是否在下一阶段进行汇总?如果没有,为什么不呢?这不是有违直觉吗?

  1. 最后,在map reduce作业结束时,最终输出都聚集在一台机器上,对吗?如果是,这不会使整个过程在计算上过于昂贵吗?
  1. 字数统计是最容易解释的,这就是为什么你更经常看到它。它已经成为Hadoop框架的"Hello World"示例

  2. 是的,Map和Reduce可以在同一台机器或不同的机器上。

  3. 所有键都指向同一个减速机。(所以回答你的问题映射器可以将第一个b 1和第二个b 1元组发送到不同的节点吗?是NO)

说整个过程很昂贵也是不对的。因为Map-Reduce模式可以处理/解决/分析单台机器几乎无法处理的问题(这就是为什么它被称为大数据)。现在,有了MapReduce,它可能与商品(阅读更便宜)硬件;

Map-Reduce (MR)范例是由Google创建的,Google正在进行单词计数(或者在他们的特殊情况下,他们正在创建倒排索引,但这在概念上非常相似)。你可以用MR做很多事情(人们也在尝试),但它并不是真的有用。事实上,许多公司在Word Count的特殊版本中使用MR。当Spotify分析他们的日志并报告哪些歌曲被收听的频率时,它基本上是字数统计,只是TB的日志。

最终结果不是在hadoop中的一台机器上,而是在分布式的HDFS上。然后你可以对结果执行另一个MR算法,…

在hadoop中,你有不同类型的节点,但就我们测试的MR而言,所有存储数据以及执行Map和Reduce任务的节点。直接在存储数据的机器上执行Map和Reduce作业的原因是局部性,因此可以降低网络流量。之后,您可以合并减少的结果并再次减少它们。

例如,当机器1有

a b c

和机器2有

b c d

b c

则机器2将映射和减少数据并只发送

2 b

c 2

d 1

越过电线。然而,机器2实际上不会将数据发送到任何地方,这个结果宁愿作为初步结果保存在HDFS中,并且其他机器可以访问它。

现在这是Hadoop特有的,我认为当你看到其他使用场景时,它有助于理解Map-Reduce范式。NoSQL数据库Couchbase和CouchDB使用Map-Reduce来创建视图。这意味着你可以分析数据并计算总和、最小值、最大值、计数等等。这个MR-Jobs在这样一个数据库集群的所有节点上运行,结果再次存储在数据库中,所有这些都不需要Hadoop和HDFS。

最新更新