mapreduce 做什么以及如何做

Mapreduce 是一种编程模型,用于处理(非常)大量数据。

传统的 HPC(高性能计算)通过创建一组高度连接的计算机(使用诸如极快的网络,快速访问共享存储,共享内存等)来处理计算问题,从而加快了对相对大量数据的大量计算。通常需要计算才能访问彼此的数据。一个典型的例子是天气预报。

另一方面,Mapreduce 擅长处理大量数据的相对较小的独立计算。为了实现这一点,数据分布在许多计算机上(由于数据量),并且所需的计算被分成可以独立地对每个数据位进行的阶段(映射阶段)。然后收集这些独立计算的结果,并进行第二部分计算以将所有这些单独的结果组合成最终结果(减少阶段)。

示例:计票

想象一下,你有很多的选票需要计算,并且每项投票都需要做一些工作(例如,从扫描的图像中找出哪个框被勾选)。

在这种情况下,mapreduce 实现将:

第 1 步:‘传播’

传播图像以通过可用计算机进行处理。

第 2 步:‘地图’

在每台计算机上,为每个图像:

  • 将复制到此计算机的 1 个图像作为输入
  • 找出哪个方框被勾选了
  • 输出投票的项目的编号(或代码或名称)

请注意,只要计算机获得 1 张图像,就可以开始工作。所有这些计算机都不需要进行交互来完成工作,因此不需要快速互连,共享内存或共享磁盘空间。

第 3 步:‘聚集’

在 1 台计算机上收集所有这些输出。

第 4 步:‘减少’

计算每个数字(或代码或名称)的投票数。

这个非常基本的例子也强调了如何进一步优化。在这种情况下,减少步骤本身可以在每台计算机上清楚地完成,然后可以在中央计算机上完成最终的减少。这将减少运行 reduce 步骤的一台计算机上的工作量,并限制需要通过网络传输的数据量。

示例:计数投票 - 优化(通过使用组合器)

第 1 步:‘传播’

与以前相同:传播图像以通过可用计算机进行处理。

第 2 步:‘地图’

与以前相同:在每台计算机上,对于每个图像:

  • 将复制到此计算机的 1 个图像作为输入
  • 找出哪个方框被勾选了
  • 输出投票的项目的编号(或代码或名称)

第 3 步:在当地聚集

在计算机上收集 1 台计算机的所有输出。

第 4 步:在本地’减少'

计算本地结果中每个数字(或代码或名称)的投票数,并输出这些计数。

第五步:全局’聚集'

在 1 台计算机上收集本地的所有输出。

第 6 步:全局’减少'

总结每个数字(或代码或名称)的本地投票数。

请注意,在步骤 3 中,没有必要等待以下任何情况下的所有结果:

  • 如果这对于计算机本地资源(如存储/内存)来说太多了
  • 如果计算机发生故障时重做工作的成本被认为是大的等待所有本地结果
  • 如果网络现在可以自由传输中间结果

到目前为止,在本地计算机上生成的结果可以进行本地收集和本地缩减,这可以随时进行。

局部减少步骤称为组合器步骤。这是用于提高性能的可选步骤。