首页 文章

详细了解MapReduce

提问于
浏览
2

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

2 回答

  • 0

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

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

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

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

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

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

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

    • 价格大量的理 property 品

    希望以上有所帮助 .

  • 0

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

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

相关问题