我有一个迭代的mapreduce作业,其中,当一个块,比如说Chunk i,被映射器读取时,有关该块中记录的一些信息存储在一个名为F_i的辅助文件中。在下一次迭代(作业)中,不同的映射器可能会读取 Chunk i。但是,此映射器必须更新辅助文件 Fi 中的某些信息。是否有任何机制可以做到这一点?
我相信如果我们能找到一种方法来区分不同的块,我们就可以解决它,例如,如果每个块都有一个唯一的名称,那么映射器可以简单地读取它所馈送的块的辅助文件。
使用自定义计数器。更新每个地图中的计数器,因为您继续处理从 1 开始的分割。因此,对于拆分#1计数器= 1。并相应地命名文件,例如块 1 的 F_1。
在下一次迭代中应用相同的技巧。创建一个计数器,并随着映射器的进行而继续增加它。每次在映射器中输入计数器值时检查计数器值,并读取名称中与此计数器的值具有相同编号的文件。例如:
假设在第一次迭代中,您处理了 5 个块。这意味着您最终会得到 5 个文件,F_1、F_2等。现在,在第二阶段,您将再次从块 1 开始。创建计数器将其更新为 1。现在检查映射器本身内的计数器值,如果值为 1,则知道必须读取名为 File_1 的文件。