gpt4 book ai didi

java - 未能报告状态 600 秒。杀戮!报告 hadoop 的进展

转载 作者:搜寻专家 更新时间:2023-10-30 21:07:38 25 4
gpt4 key购买 nike

我收到以下错误:

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

用于我的 map 作业。这个问题类似于this , this , 和 this .但是,我不想增加 hadoop 终止不报告进度的任务之前的默认时间,即

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

相反,我想使用 context.progress()context.setStatus("Some Message")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 progress
context.setStatus("Progressing:" + count);
System.out.println("Optimise Progress:" + context.getStatus());
context.progress();
count++;
}
}

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

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

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

最佳答案

此问题与 bug in Hadoop 0.20 有关由此,对 context.setStatus()context.progress() 的调用不会报告给底层框架(设置各种计数器的调用也不起作用)。有可用的补丁,因此更新到较新版本的 Hadoop 应该可以解决此问题。

关于java - 未能报告状态 600 秒。杀戮!报告 hadoop 的进展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16056707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com