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