集群出现大面积任务失败,表现为mapreduce刚启动不久,就抛出异常,查看log可以看到,
Status : FAILED
java.lang.Throwable: Child Error
at org.apache.hadoop.mapred.TaskRunner.run(TaskRunner.java:271)
Caused by: java.io.IOException: Task process exit with nonzero status of 1.
at org.apache.hadoop.mapred.TaskRunner.run(TaskRunner.java:258)
找了资料很长时间,经过了怀疑时钟同步有问题,ulimit设置不正确,终于在台湾,老外网站一个不经意的地方提到可能是写入有问题,或者磁盘不足。
They say 'it's an OS limit on the number of sub-directories that can be related in another directory.'
查了磁盘空间,还有足够的空间可以写数据。
突然想到是否是日志目录告警,因为每一个都会在log目录下建一个子目录的,而log目录所在磁盘格式是ext3,而linux的ext3文件格式是有子目录上限的,为32000,除掉. ..,子目录最多只能有31998.
查看/app/hadoop/logs/userlogs下子目录,果然达到了上限31998.
一天的子任务log能达到上限,看来是错误连续出错,导致子目录来不及删除引起。写了个脚本,删除各节点机器的部分userlogs下的子目录log后,问题解决。
总结:除了每天删除外,还要监控log子目录是否会达到上限。
Status : FAILED
java.lang.Throwable: Child Error
at org.apache.hadoop.mapred.TaskRunner.run(TaskRunner.java:271)
Caused by: java.io.IOException: Task process exit with nonzero status of 1.
at org.apache.hadoop.mapred.TaskRunner.run(TaskRunner.java:258)
找了资料很长时间,经过了怀疑时钟同步有问题,ulimit设置不正确,终于在台湾,老外网站一个不经意的地方提到可能是写入有问题,或者磁盘不足。
They say 'it's an OS limit on the number of sub-directories that can be related in another directory.'
查了磁盘空间,还有足够的空间可以写数据。
突然想到是否是日志目录告警,因为每一个都会在log目录下建一个子目录的,而log目录所在磁盘格式是ext3,而linux的ext3文件格式是有子目录上限的,为32000,除掉. ..,子目录最多只能有31998.
查看/app/hadoop/logs/userlogs下子目录,果然达到了上限31998.
一天的子任务log能达到上限,看来是错误连续出错,导致子目录来不及删除引起。写了个脚本,删除各节点机器的部分userlogs下的子目录log后,问题解决。
总结:除了每天删除外,还要监控log子目录是否会达到上限。