我一直在学习mapreduce算法及其可能扩展到数百万台机器的方法,但是我不了解map阶段之后中间键的排序如何扩展,因为它将:
1,000,000 x 1,000,000
:潜在的机器相互传达中间结果的小键/值对?这不是瓶颈吗?
最佳答案
的确,Hadoop MapReduce的瓶颈之一是集群上机器之间的网络带宽。但是,每个映射阶段的输出不会发送到集群中的每台机器。
映射和归约函数的数量由您正在运行的作业定义。每个映射都会处理其输入数据,将其分类以对键进行分组,然后将其写入磁盘。该工作定义了您希望对 map 输出应用多少个reduce函数。
每个reduce都需要查看给定键的所有数据。因此,如果您为该作业运行了一个reduce,则每个映射的所有输出都需要发送到正在运行该reduce的集群中的节点。在reduce运行之前,将来自每个映射的数据合并以对所有键进行分组。
如果使用了多个化简器,则映射将对它们的输出进行分区,从而为每个化简创建一个。分区将发送到正确的reduce。这样可确保通过一次归约处理给定键的所有数据。
为了帮助减少需要通过网络发送的数据量,您可以将合并功能应用于 map 的输出。这具有对 map 的输出进行缩减的效果。因此,您可以最大程度地减少需要传输到reducer的数据量,并加快整个作业的执行时间。
关于hadoop - Mapreduce中间键排序的网络带宽瓶颈?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2423544/