hadoop 报错 org.apache.hadoop.mapred.TaskTracker: Process Thread Dump: lost task
org.apache.hadoop.mapred.TaskTracker: Process Thread Dump: lost taskThread 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解决了
?
?
?
?