如何确保MapReduce任务彼此独立?

时间:2010-03-01 16:53:43

标签: hadoop parallel-processing mapreduce batch-processing hadoop2

我很好奇,但MapReduce,Hadoop等如何将一大块数据分解为独立运行的任务?考虑到数据非常相互关联,任务之间的状态条件等等,我很难想象它是怎么回事。

感谢。

1 个答案:

答案 0 :(得分:0)

如果数据与IS相关,那么确保传递信息是您的职责。无论任何(未实现的)关系如何,MapReduce都会分解数据并对其进行处理:

Map只读取输入文件中的块数据,并一次将它们传递给map-function一个“记录”。默认记录是一行(但可以修改)。

您可以使用其原点在Map中注释数据,但您基本上可以使用Map进行注释:对数据进行分类。您可以通过新密钥发出新密钥和新值以及MapReduce组。因此,如果不同记录之间存在关系:选择相同(或类似的* 1)密钥进行发布,则将它们组合在一起。

对于Reduce,数据被分区/排序(即分组发生的位置),之后reduce函数接收来自一个组的所有数据:一个键及其所有相关值。现在,您可以聚合这些值。就是这样。

所以你有一个由MapReduce实现的全部分组。其他一切都是你的责任。您想要两个来源的交叉产品吗?例如,通过引入人工密钥和多发射(片段和复制连接)来实现它。你的想象力是极限。并且:您始终可以通过其他工作传递数据。

* 1:类似,因为您可以在以后影响分组的选择。通常它是group-identity,但你可以改变它。