无法报告状态600秒钟。杀人!报告Hadoop的进度

【字号: 日期:2024-03-04浏览:23作者:雯心
如何解决无法报告状态600秒钟。杀人!报告Hadoop的进度?

这个问题是一个做错误Hadoop中0.20由此将调用context.setStatus()和context.progress()不被报告给底层框架(电话设置不同的柜台不工作要么)。有可用的补丁程序,因此更新到较新版本的Hadoop应该可以解决此问题。

解决方法

我收到以下错误:

Task attempt_201304161625_0028_m_000000_0 failed to report status for 600 seconds. Killing!

我的地图工作。但是, 我不想增加hadoop杀死不报告进度的任务之前的默认时间 ,即

Configuration conf=new Configuration();long milliSeconds = 1000*60*60;conf.setLong('mapred.task.timeout',milliSeconds);

相反,我想无论是使用定期汇报工作进度context.progress(),context.setStatus('SomeMessage')或者context.getCounter(SOME_ENUM.PROGRESS).increment(1)或者类似的东西。但是,这仍然导致该作业被杀死。这是我尝试报告进度的代码段。映射器:

protected void map(Key key,Value value,Context context) throws IOException,InterruptedException { //do some things Optimiser optimiser = new Optimiser(); optimiser.optimiseFurther(<some parameters>,context); //more things context.write(newKey,newValue);}

Optimiser类中的optimiseFurther方法:

public void optimiseFurther(<Some parameters>,TaskAttemptContext context) { int count = 0; while(something is true) {//optimise//try to report progresscontext.setStatus('Progressing:' + count);System.out.println('Optimise Progress:' + context.getStatus());context.progress();count++; }}

映射器的输出显示状态正在更新:

Optimise Progress:Progressing:0Optimise Progress:Progressing:1Optimise Progress:Progressing:2...

但是,在默认时间后,该作业仍被终止。我是否以错误的方式使用上下文?为了成功报告进度,我需要在作业设置中做其他事情吗?

相关文章: