hadoop运维之jobtracker无故停止服务

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


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

[python] view plain copy
  1. 12/07/0318:07:22INFOhdfs.DFSClient:ExceptionincreateBlockOutputStreamjava.io.EOFException
  2. 12/07/0318:07:22INFOhdfs.DFSClient:Abandoningblockblk_-1772232086636991
  3. 458_5671628
  4. 12/07/0318:07:28INFOhdfs.DFSClient:ExceptionincreateBlockOutputStreamjava.io.EOFException
  5. 12/07/0318:07:28INFOhdfs.DFSClient:Abandoningblockblk_-2108024038073283869_5671629
  6. 12
  7. /07/0318:07:34INFOhdfs.DFSClient:ExceptionincreateBlockOutputStreamjava.io.IOException:BadconnectackwithfirstBadLinkas192.168.1.25:50010
  8. 12/07/0318:07:34INFOhdfs.DFSClient:Abandoning
  9. blockblk_-6674020380591432013_5671629
  10. 12/07/0318:07:40INFOhdfs.DFSClient:ExceptionincreateBlockOutputStreamjava.io.IOException:BadconnectackwithfirstBadLinkas192.168.1.26:50010
  11. 12/07/0
  12. 318:07:40INFOhdfs.DFSClient:Abandoningblockblk_-3788726859662311832_5671629
  13. 12/07/0318:07:46WARNhdfs.DFSClient:DataStreamerException:java.io.IOException:Unabletocreatenewblock.
  14. ator
  15. g.apache.hadoop.hdfs.DFSClient$DFSOutputStream.nextBlockOutputStream(DFSClient.java:3002)
  16. atorg.apache.hadoop.hdfs.DFSClient$DFSOutputStream.access$2000(DFSClient.java:2255)
  17. atorg.apache.hadoop.hd
  18. fs.DFSClient$DFSOutputStream$DataStreamer.run(DFSClient.java:2446)
  19. 12/07/0318:07:46WARNhdfs.DFSClient:ErrorRecoveryforblockblk_-3788726859662311832_5671629baddatanode[2]nodes==null
  20. 12/07
  21. /0318:07:46WARNhdfs.DFSClient:Couldnotgetblocklocations.Sourcefile"/tmp/hadoop-hadoop/mapred/staging/hadoop/.staging/job_201206270914_17301/job.jar"-Aborting...
从namenode日志中发现文件块blk_-2108024038073283869_5671629是用于jobtracker的任务jar包:

[python] view plain copy
  1. 2012-07-0318:07:27,316INFOorg.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 plain copy
  1. 2012-07-0318:07:10,274ERRORorg.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:xceiverCount257exceedsthelimitofconcurrentxcievers256
百度了下错误信息:xceiverCount 257 exceeds the limit of concurrent xcievers 256的含义,发现报错的原因主要是因为配置项:
[html] view plain copy
  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参数修改大一些即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值