hadoop 报错 org.apache.hadoop.mapred.TaskTracker: Process Thread Dump: lost task

项目最近报错,形如:

org.apache.hadoop.mapred.TaskTracker: Process Thread Dump: lost task
Thread 2958 (process reaper):
   State: RUNNABLE
    Blocked count: 0
   Waited count: 0
   Stack:
     java.lang.UNIXProcess.waitForProcessExit(Native Method)
     java.lang.UNIXProcess.access$900(UNIXProcess.java:20)
     java.lang.UNIXProcess$1$1.run(UNIXProcess.java:132)
Thread 2957 (JVM Runner jvm_201005091721_0012_m_209736581 spawned.):
   State: WAITING
   Blocked count: 1
   Waited count: 2
   Waiting on [url=mailto:java.lang.UNIXProcess@874c04]java.lang.UNIXProcess@874c04[/url]
   Stack:
     java.lang.Object.wait(Native Method)
     java.lang.Object.wait(Object.java:485)
     java.lang.UNIXProcess.waitFor(UNIXProcess.java:165)
    org.apache.hadoop.util.Shell.runCommand(Shell.java:186)
    org.apache.hadoop.util.Shell.run(Shell.java:134)
    org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:286)        org.apache.hadoop.mapred.JvmManager$JvmManagerForType$JvmRunner.runChild(JvmManager.java:335)   org.apache.hadoop.mapred.JvmManager$JvmManagerForType$JvmRunner.run(JvmManager.java:324)

 错误是因为tasktracker没有在timeout规定时间内返回心跳状态,所以jobtracker就认为这个tasktracker死了,需要检查代码是否有死循环,或是处理时间过长等等。默认的timeout是10分钟

 

解决方法:

1. 设置超时时间:mapred.task.timeout : 1800000 设置为30分钟

或是设置为0,则不检查超时,这需要有信息代码是绝对没问题的,不建议设置为0,因为每个tasktracker就是slaver上的一个child进程,要是放任不管,这个进程会一直存在

 

2. 自动返回tasktracker状态:

context.progress();

 

 

在项目中,发现代码出现死循环,是因为集群时间不同步,不断的出现请求elasticsearch出错,在昨晚时钟同步后,bug解决了

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值