详细了解MapReduce

详细了解MapReduce,mapreduce,Mapreduce,我读了一篇关于MapReduce的文章,但我仍然对如何将作业分解为任务(详细)以利用并行处理感到困惑,特别是在以下情况下: 假设在映射过程之后,我们有1亿条记录(键/值对),有5个键,即“key1”、“key2”、“key3”、“key4”、“key5”。第一个密钥有9900万条记录,其余每个密钥有25万条记录。 如果我们有3名工人来完成减少的任务,那么船长如何分配工作? 我曾读到,每个键只由一个减速机处理,因此,如果减速机必须处理“键1”,那么它会比其他键工作得多吗?在这种情况下,减速机的并行

我读了一篇关于MapReduce的文章,但我仍然对如何将作业分解为任务(详细)以利用并行处理感到困惑,特别是在以下情况下: 假设在映射过程之后,我们有1亿条记录(键/值对),有5个键,即“key1”、“key2”、“key3”、“key4”、“key5”。第一个密钥有9900万条记录,其余每个密钥有25万条记录。 如果我们有3名工人来完成减少的任务,那么船长如何分配工作?
我曾读到,每个键只由一个减速机处理,因此,如果减速机必须处理“键1”,那么它会比其他键工作得多吗?在这种情况下,减速机的并行处理没有多大帮助

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

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

  • 作业可以划分为在所需执行力和所用时间方面“相似”的任务。您的示例是这种假设的极端情况,因此Map reduce无法正常工作

  • 存在合理的划分策略,并且这种策略不会比运行任务花费更多的时间

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

  • 在现实中,有很多问题满足上述4点(当然很多问题不满足,这就是为什么Map reduce不是一个通用的解决方案)。常见示例包括所有输入数据数量大、需要单独处理、计算时间昂贵但输入数据总大小小的问题。例如

    • 确定直线是否与可能有许多三角形面的三维结构相交,然后对每个三角形运行相交确定

    • 为大量金融产品定价


    希望以上内容有所帮助。

    具有相同键的输入数据不必分配给一个减速器。许多还原程序可以使用同一个键共享输入数据

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