zoukankan      html  css  js  c++  java
  • Hadoop on Mac with IntelliJ IDEA

    本文讲述作业在Hadoop 1.2.1完成map后ruduce阶段遇到failed to report status for 600 seconds. Killing!问题的解决过程。

    环境:Mac OS X 10.9.5, IntelliJ IDEA 13.1.4, Hadoop 1.2.1

    Hadoop放在虚拟机中,宿主机通过SSH连接,IDE和数据文件在宿主机。IDEA自身运行于JDK 1.8,IDEA工程及Hadoop使用JDK 1.6。

    提交作业到hadoop后,作业执行时间过长,输出如下

    reduce阶段进行到66%后重新开始,接着输出报告10分钟内汇报状态失败,进程被终止提示。然后,reduce继续。

    造成超时的原因可能是reducer执行耗时计算却没向Hadoop框架汇报任务进展。还可能是,程序耗尽所有java堆空间或垃圾回收器频繁启动,导致reducer无法及时向job tracker发送状态因而被终止。或者是,其中一个reducer接收到太多错误的数据,它们使程序失去响应。对此,主要有两种解决方式。

    方式一,在mapred-site.xml中增大超时值

    <property>
    <name>mapred.task.timeout</name>
    <value>1200000</value>
    </property>

    默认超时值为600000毫秒,即10分钟。若不想修改全局配置,只需修改任务的configuration,为单个任务作特殊处理。

    方式二,每隔n行记录汇报一次,如Reducer文档示例所示

    public void reduce(K key, Iterator<V> values,
    OutputCollector<K, V> output, 
    Reporter reporter) throws IOException {
        // report progress
        if ((noValues%10) == 0) {
            reporter.progress();
        }
        // ...
    }

    另外,还可以在上述示例中添加一个自定义计数器,如reporter.incrCounter(NUM_RECORDS, 1);当以上方式无效时,可考虑方式三。

    如果是Hadoop 1.x以上版本,则reporter过时,用org.apache.hadoop.mapreduce.TaskAttemptContext.progress()来向jobtracker发送心跳包。

    方式三,尝试加大JVM堆大小,在mapred-site.xml设置

    <property>
    <name>mapred.child.java.opts</name>
    <value>-Xmx2048m</value>
    </property>

    如何确定堆大小,可参考Hadoop on Mac with IntelliJ IDEA - 5 解决java heap space问题引用资料:JVM调优总结 -Xms -Xmx -Xmn -Xss。同时,尝试减少并行reducer数量。

    <property>
    <name>mapred.tasktracker.reduce.tasks.maximum</name>
    <value>1</value>
    </property>

    默认值为2,新设置数值应该小于当前值。 

    参考

    [1]http://stackoverflow.com/questions/15281307/the-reduce-fails-due-to-task-attempt-failed-to-report-status-for-600-seconds-ki

  • 相关阅读:
    [Outlook] Outlook2013能收但无法发送邮件-0x800CCC13, 0x800CCC0B, 0x8004210B
    [Mobile] 手机浏览器输入框-数字输入框
    [Qcon] 百姓网开发总结
    [QCon] Scrum阅读随想
    [Spring] 事务级别定义
    [Monitor] 监控规则定义
    [Spring Batch] 图解Spring Batch原理
    [JavaCore] 微信手机浏览器版本判断
    Python 编码简单说
    矩阵或多维数组两种常用实现方法
  • 原文地址:https://www.cnblogs.com/michaellfx/p/4003434.html
Copyright © 2011-2022 走看看