我一直在做很多关于Map Reduce的阅读,我有以下问题似乎无法找到答案:
每个人都指向单词计数示例。但是为什么我们需要地图缩小范例来获得一个真正庞大的语料库?我不确定如何让一台机器从一个非常庞大的流中读取并保持内存中的字数统计比让一些连接的机器在它们之间分割计数任务并再次聚合它更糟糕。最后,最后还是会有一个地方可以维持所有的计数吗?
映射器和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元组发送到不同的节点?如果是,那么计数会在下一阶段汇总吗?如果没有,那为什么不呢?这不是反直觉的吗?
答案 0 :(得分:0)
字数最容易解释,这就是为什么你经常看到它。它已成为" Hello World" Hadoop Framework的示例。
是的,Map和Reduce可以在同一台机器或不同的机器上。只有在所有地图完成后才开始减少。
所有键都转到同一个reducer。 (所以回答你的问题 映射器是否可以将第一个b 1和第二个b 1元组发送到不同的节点---是NO)
也不能说整个加工过程很昂贵。 由于Map-Reduce范例可以处理/解决/分析几乎不可能由单个机器处理的问题(其原因称为BIG数据)。 现在使用MapReduce可以使用商品(读更便宜)的硬件;这就是为什么被广泛接受。
答案 1 :(得分:0)
Map-Reduce(MR)范例是由Google创建的,而Google正在进行字数统计(或者在他们的特殊情况下,他们正在创建倒排索引,但这在概念上非常相似)。您可以将MR用于许多事情(人们尝试这样做),但它并不是非常有用。事实上,许多公司使用MR来获取特殊版本的Word Count。当Spotify分析他们的日志并报告哪些歌曲被多久收听时,它基本上是字数,只有TB的日志。
最终结果不仅仅落在hadoop中的一台机器上,而是再次放置在分配的HDFS中。而且你可以在那个结果上执行另一个MR算法,......
在hadoop中你有不同类型的节点,但就我们测试MR而言,所有节点都存储数据以及执行Map和Reduce作业。直接在存储数据的机器上执行Map和Reduce作业的原因是位置,因此网络流量较低。之后您可以将缩小的结果组合起来并再次减少它们。
例如当机器1有
时a b c
和机器2有
b c d
b c
比机器2将映射和减少数据并仅发送
b 2
c 2
d 1
通过电线。然而,机器2实际上不会在任何地方发送数据,这个结果宁愿作为HDFS中的初步结果保存,而其他机器可以访问它。
现在这个特定于Hadoop,我认为当你查看其他使用场景时,有助于理解Map-Reduce范例。 NoSQL数据库Couchbase和CouchDB使用Map-Reduce创建视图。这意味着您可以分析数据和计算总和,最小值,最大值,计数,...这个MR-Jobs在这样的数据库集群的所有节点上运行,结果再次存储在数据库中,所有这些都没有Hadoop和HDFS。