0

我有一个迭代 mapreduce 作业,其中,当一个块(比如说 Chunk i)被映射器读取时,一些关于该块中记录的信息存储在一个名为 F_i 的辅助文件中。在下一次迭代(作业)中,不同的映射器可能会读取 Chunk i。但是,这个映射器必须更新辅助文件 Fi 中的一些信息。有什么机制可以做到这一点吗?

我相信如果我们能找到一种方法来区分不同的块,我们就能解决它。例如,如果每个块都有一个唯一的名称,那么映射器可以简单地读取它所馈送的块的辅助文件。

4

1 回答 1

0

使用自定义计数器。当您从 1 开始继续处理拆分时,更新每个地图中的计数器。因此,对于split#1 counter=1。并相应地命名文件,如块 1 的F_1

在下一次迭代中应用相同的技巧。创建一个计数器并随着您的映射器继续增加它。每次输入映射器时检查计数器值并读取名称中与该计数器值具有相同数字的文件。例如 :

假设在第一次迭代中您处理了 5 个块。这意味着您最终会得到 5 个文件,F_1、F_2 等等。现在,在第二阶段,您将再次从块 1 开始。创建计数器将其更新为 1。现在检查映射器本身内部的计数器值,如果值为 1,则您知道您必须读取名为文件_1。

于 2013-09-19T17:44:25.913 回答