我在hadoop中遇到了超时问题,我的工作被杀了。在close()方法中有一个繁重的清理工作,所以我需要在进行清理时以close方法更新进度。
对于这种情况,增加超时不是一个好的选择,因为它不能随着清理工作的数量而扩展。
我正在查看的旧作业是使用旧API,它在reduce()方法中有一个可用于更新进度的报告对象。但是,close()方法中没有这样的Reporter。那么有什么解决方法吗?
答案 0 :(得分:0)
尝试使用Mapper.Context。
Hadoop提供了Prograssable接口,其中包含这个有趣的方法Public void Progress()
。 Context类实现了这个接口,因此任何mapper或reducer都可以调用:
context.progress()
表明它还活着并继续处理。
作为最后的手段,因为您确信它不是一个好的选择,您可以增加该配置属性:
<property>
<name>mapreduce.task.timeout</name>
<value>2000000</value>
</property>