1)我有一个仅映射Hadoop作业,它将数据流式传输到Cassandra集群。
2) 有时流式传输需要10分钟以上的时间,而且由于没有向作业报告进度,因此会终止任务。
3) 我试着用context.progress()方法报告进度,但没有帮助。
是否还需要向hadoop作业报告进度?
我写了一个示例代码如下,以模拟这个问题,并使用以下代码。
Thread.sleep(360000);
context.progress();
Thread.sleep(360000);
它失败,并显示以下错误消息
2006年2月12日11:40:25映射信息。JobClient:任务Id:attempt_20122061119_0001_m_ 000001_1,状态:任务失败尝试_201202061119_0001_m_ 000001_1无法报告601的状态秒。杀人!
请参阅此问题:
如何修复";任务尝试_201104251139_0295_r_ 000006_0在600秒内未能报告状态"
将mapred.task.timeout
属性设置为更高的值是解决此问题的最简单方法。
context.progress()应该可以工作,但可能面临以下问题:https://issues.apache.org/jira/browse/MAPREDUCE-1905,在以后的版本中进行了修复。