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