我们有一个系统,它接收指定目录上的档案,并定期启动一个 mapreduce 作业,该作业打开档案并处理其中的文件。为了避免下次重新处理相同的档案,我们在 RecordReader 上使用 close() 方法,以便在读取最后一个条目后将其删除。
这种方法的问题(我们认为)是,如果一个特定的映射失败,下一个对其进行另一次尝试的映射器会发现原始文件已被记录读取器从第一个文件中删除,并且它会被炸毁。我们认为要走的路是等到所有映射和归约完成,然后删除输入档案。
这是最好的方法吗?
如果是这样,我们如何从主程序中获取系统找到的所有输入文件的列表?(我们不能只清理整个输入目录,可能存在新文件)
IE:
. . .
job.waitForCompletion(true);
(we're done, delete input files, how?)
return 0;
}