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 秒内完成任务

    增加ma​​pred-site.xml中参数mapreduce.task.timeout的超时时间

【讨论】:

以上是关于hadoop中这种失败的原因是啥?的主要内容,如果未能解决你的问题,请参考以下文章

namenode启动失败,这是啥原因

百度知道发送问题提示操作失败是啥原因

SQL 数据库连接服务器失败是啥原因?

安卓x5内核加载失败怎么办 导致失败的原因是啥呢

win10连接vpn失败是啥原因

断言失败的原因是啥