【问题标题】:Hadoop Custom Output format, when do all reducers end?Hadoop自定义输出格式,所有reducer什么时候结束?
【发布时间】:2015-01-07 11:39:07
【问题描述】:

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

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

【问题讨论】:

  • 你需要什么样的清理工作?
  • 我在数据库中创建了一条记录,我需要在 MR 作业结束时将其删除,所以这就是为什么我要问所有 reducer 什么时候结束。

标签: java hadoop mapreduce reduce outputformat


【解决方案1】:

您可以使用驱动程序本身进行最终清理,而不是依赖OutputFormat。我怀疑它是否真的提供了这样的功能(api)。 finalize 方法可能是最后的手段,但根本不可取。

JobwaitForCompletion 方法仅在作业完成后返回。所以简单地这样做:

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

我希望这能满足您的需要。

【讨论】:

  • 我尝试了这个解决方案,它是我迄今为止最好的解决方案,但我想做的是独立于正在运行的工作进行清理,但这不会实现。我没有在 API 中看到任何提及支持此功能的内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-02
  • 1970-01-01
  • 1970-01-01
  • 2015-04-24
  • 2018-06-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多