记录一下,可能算是个比较典型的故障,磁盘满导致的task tracker无法启动。

故障是一台tasktracker挂了,怎么也起不来,报错信息如下。

 

   
   
   
   
  1. 2013-03-26 17:34:57,620 ERROR org.apache.hadoop.mapred.TaskTracker: Can not start task tracker because ENOENT: No such file or directory 
  2.         at org.apache.hadoop.io.nativeio.NativeIO.chmod(Native Method) 
  3.         at org.apache.hadoop.fs.FileUtil.execSetPermission(FileUtil.java:699) 
  4.         at org.apache.hadoop.fs.FileUtil.setPermission(FileUtil.java:654) 
  5.         at org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:509) 
  6.         at org.apache.hadoop.fs.RawLocalFileSystem.mkdirs(RawLocalFileSystem.java:344) 
  7.         at org.apache.hadoop.fs.FilterFileSystem.mkdirs(FilterFileSystem.java:189) 
  8.         at org.apache.hadoop.mapred.TaskTracker.initialize(TaskTracker.java:723) 
  9.         at org.apache.hadoop.mapred.TaskTracker.(TaskTracker.java:1459) 
  10.         at org.apache.hadoop.mapred.TaskTracker.main(TaskTracker.java:3742) 
  11.  
  12. 2013-03-26 17:34:57,621 INFO org.apache.hadoop.mapred.TaskTracker: SHUTDOWN_MSG:  
  13. /************************************************************ 
  14. SHUTDOWN_MSG: Shutting down TaskTracker at hadoop-node-51/192.168.1.51 
  15. ************************************************************/ 

从表面上看,这是一个找不到文件的错误,下面还报了一堆跟创建目录和权限设置相关的错误。然后翻看了相关的源码,发现跟这些都没关系。

上google搜了一圈也没有什么斩获,都是与此无关的报错。

按照报错是权限设置的问题进行分析,以为是有人不小心改了mapred文件夹下的文件的权限,导致hadoop无法创建文件夹和读取文件造成的。于是去mapred文件夹查看,发现权限都是正确的。但是还是强行chown了一遍,但是没起作用。tt仍然起不来。

后来看了一下df,发现几块硬盘中的一块100%了,完全一点空间都不剩。进去看了一下,是因为有人在跑任务的时候,把map/reduce中间结果的临时数据文件扔到了那块硬盘里,也没有及时清理,所以导致磁盘满了。

让相关人员清理了中间文件,task tracker立刻就正常启动。

 

这个报错是比较神奇的,按说跟磁盘相关的事情,hadoop起码应该报一个DiskChecker的故障,但是却报了一个找不到文件的故障。一方面说明hadoop的有些报错调用的exception并不完全准确,在设置了dfs保留分区的情况下,硬盘满了,报错是跟硬盘无关的反而报了权限错误。一方面也说明运维hadoop的人需要拓宽思路,有时候一件事表象,不代表这件事背后的原因就是这样的,一定要去找到那个truth。