【发布时间】:2011-01-22 09:09:48
【问题描述】:
我很好奇,但是 MapReduce、Hadoop 等如何将一大块数据分解为独立操作的任务?我很难想象这是怎么回事,考虑到数据通常是相互关联的,任务之间的状态条件等等。
【问题讨论】:
标签: hadoop parallel-processing mapreduce batch-processing hadoop2
我很好奇,但是 MapReduce、Hadoop 等如何将一大块数据分解为独立操作的任务?我很难想象这是怎么回事,考虑到数据通常是相互关联的,任务之间的状态条件等等。
【问题讨论】:
标签: hadoop parallel-processing mapreduce batch-processing hadoop2
如果数据是相关的,那么您的工作就是确保信息得以传递。 MapReduce 分解数据并处理它,而不考虑任何(未实现的)关系:
Map 只是从输入文件中以块的形式读取数据,然后一次将它们传递给 map 函数一个“记录”。 default-record 是一行(但可以修改)。
您可以在 Map 中使用其来源注释数据,但您基本上可以使用 Map 做的是:对数据进行分类。您通过新键发出一个新键和新值以及 MapReduce 组。所以如果不同记录之间有关系:选择相同(或类似*1)的key来发出它们,这样它们就被组合在一起了。
对于 Reduce,数据被分区/排序(即分组发生的地方),然后 reduce 函数从一组中接收所有数据:一个键及其所有关联值。现在您可以汇总这些值。就是这样。
所以你有一个由 MapReduce 实现的总体分组。其他一切都是你的责任。您想要来自两个来源的交叉产品吗?例如通过引入人工密钥和多发射(片段和复制连接)来实现它。你的想象力是极限。并且:您始终可以通过另一个作业传递数据。
*1:类似,因为你可以影响以后分组的选择。通常它是 group 是 identity-function,但你可以改变它。
【讨论】: