1

我正在为 hadoop 构建自定义输出格式,并且想知道输出格式中是否有办法知道所有减速器(RecordWriters)何时完成?

为了知道一个 RecordWriter 完成了,可以使用 RecordWriter 的 close 方法,但是当所有 RecordWriters 完成时执行一些清理呢?

4

1 回答 1

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();

我希望这应该足以满足您的需要。

于 2014-11-12T04:34:12.170 回答