执行reduce任务时,我的hadoop作业经常出现这种情况。
此问题的一些原因可能是reducer长时间没有编写上下文,因此您需要在代码中添加context.progress()。但是在我的reduce函数中,上下文是经常写的。这是我的reduce函数:
public void reduce(Text key, Iterable<Text> values, Context context) throws
IOException,InterruptedException{
Text s=new Text();
Text exist=new Text("e");
ArrayList<String> T=new ArrayList<String>();
for(Text val:values){
String value=val.toString();
T.add(value);
s.set(key.toString()+"-"+value);
context.write(s,exist);
}
Text need=new Text("n");
for(int i=0;i<T.size();++i){
String a=T.get(i);
for(int j=i+1;j<T.size();++j){
String b=T.get(j);
int f=a.compareTo(b);
if(f<0){
s.set(a+"-"+b);
context.write(s,need);
}
if(f>0){
s.set(b+"-"+a);
context.write(s,need);
}
}
}
}
您可以看到上下文经常在循环中写入。 这次失败的原因是什么?我该怎么处理呢?
答案 0 :(得分:3)
您的任务需要600多秒才能完成。
从Apache文档page,您可以找到更多详细信息。
mapreduce.task.timeout
600000(毫秒秒的默认值)
如果任务既不读取输入,也不写入输出,也不更新其状态字符串,则终止任务之前的毫秒数。值为0将禁用超时。
可能的选择:
Finetune您的应用程序在600秒内完成任务
或者
在 mapred-site.xml
mapreduce.task.timeout
的超时时间
醇>