Java Hadoop自定义输出格式,所有减缩器何时结束?

Java Hadoop自定义输出格式,所有减缩器何时结束?,java,hadoop,mapreduce,reduce,outputformat,Java,Hadoop,Mapreduce,Reduce,Outputformat,我正在为hadoop构建一个自定义输出格式,我想知道在输出格式中是否有一种方法可以知道所有的还原器(RecordWriter)何时完成 为了知道一个RecordWriter已完成,可以使用RecordWriter的close方法,但是在所有RecordWriter完成后执行一些清理怎么样?您可以使用驱动程序本身来执行最终清理,而不是依赖于OutputFormat。我怀疑它是否真的提供了这样一个特性(api)。finalize方法可能是最后的选择,但根本不可取 Job的waitForComplet

我正在为hadoop构建一个自定义输出格式,我想知道在输出格式中是否有一种方法可以知道所有的还原器(RecordWriter)何时完成


为了知道一个RecordWriter已完成,可以使用RecordWriter的close方法,但是在所有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();

我希望这能满足你的需要

你需要什么样的清理?我已经在数据库中创建了一个记录,我需要在MR作业结束时删除它,这就是为什么我要问所有减缩器何时结束。我尝试了这个解决方案,这是迄今为止我所拥有的最好的解决方案,但我想做的是独立于正在运行的作业进行清理,这无法实现。我在API中没有看到任何提到这是受支持的。