我正在尝试理解 MapReduce 模型,我需要建议,因为我不确定如何使用 map 函数的中间结果对文件进行排序和分区。我从Jeffrey Dean 和 Sanjay Ghemawat 的 MapReduce 论文以及 Hadoop: The Definitive Guide 中获得了关于 MapReduce 的最多知识。
具有map函数中间结果的文件是小型排序和分区文件的组合。这些小文件被划分为对应于reduce worker的partition。然后将小文件合并为一个文件。我需要知道小文件的分区是如何完成的。首先,我认为每个分区都有一定范围的键。
例如:如果我们将键作为整数在 <1;100> 范围内,并且文件分为三个分区,那么第一个分区可以包含键在 <1,33> 范围内的值,第二个分区可以包含键在 <1,33> 范围内的值34;66> 和第三分区 <67;100>。合并文件中也有相同的分区。
但我不确定。每个分区都被发送到相应的reduce worker。在我们的示例中,如果我们有两个 reduce 工作人员,则可以将具有前两个键范围(<1,33> 和 <34;66>)的分区发送给第一个工作人员,将最后一个分区发送给第三个工作人员。但是,如果我错了并且文件以另一种方式划分(我的意思是分区没有自己的可能键范围),那么每个 reduce 工作人员都可以得到相同键的结果。所以我需要以某种方式合并这些减少工作者的结果,对吗?我可以将这些结果发送到主节点并在那里合并吗?
简而言之:我需要解释 map 阶段的文件是如何划分的(如果我的描述是错误的),并解释我如何以及在哪里可以处理 reduce 工作人员的结果。
我希望我描述了我的问题足以理解。当然,我可以解释更多。
非常感谢你的回答。