hadoop中这种失败的原因是啥?
Posted
技术标签:
【中文标题】hadoop中这种失败的原因是啥?【英文标题】:What's the reason for this failure in hadoop?hadoop中这种失败的原因是什么? 【发布时间】:2016-11-30 13:20:09 【问题描述】:在我的hadoop作业中执行reduce任务时经常出现。 出现这个问题的一些原因可能是reducer长时间没有写context,所以需要在代码中添加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);
可以看到循环中频繁写入上下文。 这次失败的原因是什么?我该如何处理?
【问题讨论】:
作业是否正确完成或因这些故障而中断? 它仍然运行到 100% 并以失败告终。@AdamSkywalker 我会首先打开应用程序 UI 并检查来自具有故障减速器的机器的应用程序日志。它们可以包含一些线索 【参考方案1】:您的任务需要 600 多秒才能完成。
从 Apache 文档page,您可以找到更多详细信息。
mapreduce.task.timeout
600000(默认值,以毫秒为单位s)
如果任务既不读取输入,也不写入输出,也不更新其状态字符串,任务将终止前的毫秒数。值 0 禁用超时。
可能的选择:
微调您的应用程序以在 600 秒内完成任务
或
增加mapred-site.xml中参数mapreduce.task.timeout
的超时时间
【讨论】:
以上是关于hadoop中这种失败的原因是啥?的主要内容,如果未能解决你的问题,请参考以下文章