以close()方式报告作业状态/进度

时间:2017-09-07 07:03:23

标签: hadoop distributed-computing

我在hadoop中遇到了超时问题,我的工作被杀了。在close()方法中有一个繁重的清理工作,所以我需要在进行清理时以close方法更新进度。

对于这种情况,增加超时不是一个好的选择,因为它不能随着清理工作的数量而扩展。

我正在查看的旧作业是使用旧API,它在reduce()方法中有一个可用于更新进度的报告对象。但是,close()方法中没有这样的Reporter。那么有什么解决方法吗?

1 个答案:

答案 0 :(得分:0)

尝试使用Mapper.Context

Hadoop提供了Prograssable接口,其中包含这个有趣的方法Public void Progress()。 Context类实现了这个接口,因此任何mapper或reducer都可以调用:

context.progress()

表明它还活着并继续处理。

作为最后的手段,因为您确信它不是一个好的选择,您可以增加该配置属性:

<property>
  <name>mapreduce.task.timeout</name>
  <value>2000000</value>
</property>
在“mapred-site.xml”中。

或者在您的代码中执行此操作:

Configuration conf = new Configuration();
long milliSeconds = 2000 * 60 * 60;
conf.setLong("mapreduce.task.timeout", milliSeconds);

此属性的值越高,对您的情况越好。默认值为600000。