我正在为hadoop构建一个自定义输出格式,并想知道输出格式中是否有一种方法可以知道所有Reducer(RecordWriters)何时完成?
为了知道一个RecordWriter已经完成,可以使用RecordWriter的close方法,但是当所有RecordWriters完成时执行一些清理呢?
答案 0 :(得分:1)
您可以使用驱动程序本身进行最后的清理,而不是依赖OutputFormat
。我怀疑它是否真的提供了这样的功能(api)。 finalize
方法可能是最后的手段,但根本不可取。
waitForCompletion
Job
方法仅在作业完成后返回。所以简单地这样做:
boolean status = job.waitForCompletion(true);
if(status){
// clean up required for successful jobs
} else {
// clean up required for failed jobs
}
如果您的清理与工作的成功/失败无关,请删除if-else
部分。如果您确实需要OutputFormat
类中的方法进行删除,请将其设为static
。例如:
job.waitForCompletion(true);
CustomOutputFormat.cleanUp();
我希望这应该满足你的需要。