之前写好的一个Hadoop代码,昨天晚上执行时报错了,查了半天没查出来,网上的方法都试了还是不行,报错信息:
2011-11-17 11:11:26,821 INFO org.apache.hadoop.mapred.JvmManager: JVM : jvm_201111071540_0140_m_-855804511 exited. Number of tasks it ran: 1
2011-11-17 11:11:26,992 INFO org.apache.hadoop.mapred.TaskTracker: attempt_201111071540_0140_m_000005_0 0.8166969%
2011-11-17 11:11:28,713 INFO org.apache.hadoop.mapred.TaskTracker: org.apache.hadoop.util.DiskChecker$DiskErrorException: Could not find taskTracker/jobcache/job_201111071540_0140/attempt_2011
11071540_0140_m_000003_0/output/file.out in any of the configured local directories
----------------------------------------------------------
11/11/17 10:42:57 INFO mapred.JobClient: Task Id : attempt_201111071540_0137_m_000004_2, Status : FAILED
Error: java.lang.Exception.getMessage()Ljava/lang/String;
----------------------------------------------------------
java.io.IOException: Task process exit with nonzero status of 1.
at org.apache.hadoop.mapred.TaskRunner.run(TaskRunner.java:418)
----------------------------------------------------------
网上给出的解决方案:
1、hadoop把/tmp文件夹给塞满了。只要把/tmp/hadoop-root/mapred 文件夹删除即可。再重新运行就不会出错了。
2、主要由hadoop的logs目录无法继续写入新文件造成,清理master和slaver上的logs文件夹后再次下发任务,正常运行。
其他、
第一,查看网络节点是否在同一个交换机;
第二,检查reduce分块是不是超出datanode的限度,实际上并不是每个核都可以利用起来。
第三,自身程序是不是对传入数据进行了校验,有些输入文件是有问题的。
最终原因:
原来是要分析的日志中有不规范的数据,程序处理出现异常,处理后解决。所以大家出现上面的错误后,请检查自己的代码是否有问题,说不定会找到原因。