我正在为hadoop构建一个定制的输出格式,我想知道在输出格式中是否有一种方法可以知道所有的reducer(recordwriter)何时都完成了?为了知道一个recordwriter已经完成,可以使用recordwriter的close方法,但是当所有的recordwriter都完成时,执行一些清理呢?
7tofc5zh1#
您可以使用驱动程序本身来执行最终清理,而不是依赖 OutputFormat . 我怀疑它是否真的提供了这样的特性(api)。这个 finalize 方法也许是最后的手段,但一点也不可取。这个 waitForCompletion 方法 Job 仅在作业完成后返回。所以简单地做如下:
OutputFormat
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 . 如:
if-else
static
job.waitForCompletion(true); CustomOutputFormat.cleanUp();
我希望这能满足你的需要。
1条答案
按热度按时间7tofc5zh1#
您可以使用驱动程序本身来执行最终清理,而不是依赖
OutputFormat
. 我怀疑它是否真的提供了这样的特性(api)。这个finalize
方法也许是最后的手段,但一点也不可取。这个
waitForCompletion
方法Job
仅在作业完成后返回。所以简单地做如下:如果你的清理工作与工作的成败无关,只需删除
if-else
部分。如果你真的需要一种方法OutputFormat
类进行删除,使其static
. 如:我希望这能满足你的需要。