详细了解MapReduce

时间:2014-08-12 03:17:59

标签: mapreduce

我读了一篇关于MapReduce的文章,但我仍然对如何将作业分成任务(详细)以利用并行处理感到困惑,特别是在这样的情况下: 假设在Map处理之后,我们有5个记录(键/值对)和5个键,即' key1',key2',' key3',key4', ' KEY5&#39 ;.第一个密钥有9900万条记录,其余密钥各有25万条。 如果我们有3名工人来完成减少任务,那么大师如何分割工作? 我已经读过每个键仅由一个reducer处理,因此如果reducer必须处理' key1',那么它是否会比其他的更有效,并且reducers的并行处理不会在这种情况下帮助多少?

2 个答案:

答案 0 :(得分:0)

Map reduce技术默认有几个假设:

  1. 作业不是相互依赖的,即您不必先运行task1来获取其输出;然后使用task1的输出运行task2;等

  2. 可以将作业分成与所需执行力和所需时间“相似”的任务。您的示例是此假设的极端情况,因此Map-reduce不能很好地工作。

  3. 存在合理的划分策略,这样的策略不会比运行任务花费更多的时间。

  4. 可以并行的任务是任务中的主要工作,并且它们不依赖于某些串行/单个资源。例如。磁盘IO。

  5. 在现实中,有很多问题满足上述4点(当然很多都没有,这就是Map-reduce不是通用解决方案的原因)。常见示例包括输入数据计数较大的所有问题,需要单独处理,计算时间昂贵但输入数据总大小较小。 E.g。

    • 确定线条是否与3D结构相交,您可以在其中拥有大量三角形面,并为每个三角形运行交叉点确定

    • 为大量金融产品定价

    希望以上有所帮助。

答案 1 :(得分:0)

不必将具有相同键的输入数据分配给一个减速器。许多Reducer可以使用相同的密钥共享输入数据。

想象一下合并排序。映射作业将数组划分为多个子数组。多层reduce作业排序并将这些子阵列合并回一个阵列。无论数据如何排列在数组中,复杂性仍然是O(n log n)。实际上,在最佳情况和最坏情况下合并排序的复杂性与普通情况相同。合并排序算法分割和合并数组的方式不受数据排列的影响。