我正在为 hadoop 构建自定义输出格式,并且想知道输出格式中是否有办法知道所有减速器(RecordWriters)何时完成?
为了知道一个 RecordWriter 完成了,可以使用 RecordWriter 的 close 方法,但是当所有 RecordWriters 完成时执行一些清理呢?
我正在为 hadoop 构建自定义输出格式,并且想知道输出格式中是否有办法知道所有减速器(RecordWriters)何时完成?
为了知道一个 RecordWriter 完成了,可以使用 RecordWriter 的 close 方法,但是当所有 RecordWriters 完成时执行一些清理呢?
您可以使用驱动程序本身进行最终清理,而不是依赖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();
我希望这应该足以满足您的需要。