我正在为hadoop构建一个自定义输出格式,我想知道输出格式中是否有一种方法可以知道所有还原器(RecordWriters)何时完成?
为了知道一个RecordWriter已经完成,可以使用RecordWriter的关闭方法,但当所有RecordWriter都完成时,执行一些清理操作呢?
您可以使用驱动程序本身进行最终清理,而不是依赖OutputFormat
。我怀疑它是否真的提供了这样的功能(api)。finalize
方法可能是最后的手段,但根本不可取。
Job
的waitForCompletion
方法仅在作业完成后返回。所以简单地做:
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();
我希望这能满足你的需要。