hadoop运维之jobtracker无故停止服务

来源:互联网 发布:数据恢复大师怎么样 编辑:程序博客网 时间:2024/05/29 08:38

今天下午同事在使用hive提交查询时,抛出执行错误:


      于是打开jobtracker的管理页面,发现正在运行的job数目为零,tasktracker心跳正常,这一异常现象让我觉得jobtracker可能是停止服务了(一般很少出现集群的运行job数为零的情况),于是手动提交了一个mapred任务进行测试,运行错误信息如下:

[python] view plaincopy
  1. 12/07/03 18:07:22 INFO hdfs.DFSClient: Exception in createBlockOutputStream java.io.EOFException  
  2. 12/07/03 18:07:22 INFO hdfs.DFSClient: Abandoning block blk_-1772232086636991  
  3. 458_5671628  
  4. 12/07/03 18:07:28 INFO hdfs.DFSClient: Exception in createBlockOutputStream java.io.EOFException  
  5. 12/07/03 18:07:28 INFO hdfs.DFSClient: Abandoning block blk_-2108024038073283869_5671629  
  6. 12  
  7. /07/03 18:07:34 INFO hdfs.DFSClient: Exception in createBlockOutputStream java.io.IOException: Bad connect ack with firstBadLink as 192.168.1.25:50010  
  8. 12/07/03 18:07:34 INFO hdfs.DFSClient: Abandoning  
  9.  block blk_-6674020380591432013_5671629  
  10. 12/07/03 18:07:40 INFO hdfs.DFSClient: Exception in createBlockOutputStream java.io.IOException: Bad connect ack with firstBadLink as 192.168.1.26:50010  
  11. 12/07/0  
  12. 3 18:07:40 INFO hdfs.DFSClient: Abandoning block blk_-3788726859662311832_5671629  
  13. 12/07/03 18:07:46 WARN hdfs.DFSClient: DataStreamer Exception: java.io.IOException: Unable to create new block.  
  14.         at or  
  15. g.apache.hadoop.hdfs.DFSClient$DFSOutputStream.nextBlockOutputStream(DFSClient.java:3002)  
  16.         at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.access$2000(DFSClient.java:2255)  
  17.         at org.apache.hadoop.hd  
  18. fs.DFSClient$DFSOutputStream$DataStreamer.run(DFSClient.java:2446)  
  19.   
  20. 12/07/03 18:07:46 WARN hdfs.DFSClient: Error Recovery for block blk_-3788726859662311832_5671629 bad datanode[2] nodes == null  
  21. 12/07  
  22. /03 18:07:46 WARN hdfs.DFSClient: Could not get block locations. Source file "/tmp/hadoop-hadoop/mapred/staging/hadoop/.staging/job_201206270914_17301/job.jar" - Aborting...  
      从namenode日志中发现文件块blk_-2108024038073283869_5671629是用于jobtracker的任务jar包:

[python] view plaincopy
  1. 2012-07-03 18:07:27,316 INFO org.apache.hadoop.hdfs.StateChange: BLOCK* NameSystem.allocateBlock: /tmp/hadoop-hadoop/mapred/staging/  
  2. hadoop/.staging/job_201206270914_17301/job.jar. blk_-2108024038073283869_5671629  
      再到相应的datanode 上去查看日志,发现没有该文件块的信息,这下问题出来了:jobtracker向namenode申请了mapred作业配置的存储资源,且namenode正确的分配了资源(datanode 列表),然后jobtracker再联系datanode时报错了,但是当时datanode还处于正常工作中(有运行中的数据加载业务),那么,是什么原因导致jobtracker在向datanode写入数据时失败了呢?

     于是再仔细查看问题发生时datanode上的日志,发现这么一条日志信息:

[python] view plaincopy
  1. 2012-07-03 18:07:10,274 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: DatanodeRegistration(192.168.1.25:50010, storageID=DS  
  2. -841642307-50010-1324273874581, infoPort=50075, ipcPort=50020):DataXceiver  
  3. java.io.IOException: xceiverCount 257 exceeds the limit of concurrent xcievers 256  
    百度了下错误信息:xceiverCount 257 exceeds the limit of concurrent xcievers 256的含义,发现报错的原因主要是因为配置项:
[html] view plaincopy
  1. <property>  
  2.         <name>dfs.datanode.max.xcievers</name>  
  3.         <value>256</value>  
  4. </property>  
     dfs.datanode.max.xcievers 对于datanode来说,就如同linux上的文件句柄的限制,当datanode 上面的连接数操作配置中的设置时,datanode就会拒绝连接。

     好了,问题找到了,只要找机会修改集群所有datanode节点的配置,将dfs.datanode.max.xcievers参数修改大一些即可。

0 0