plantegg 发表于 2016-12-8 09:34:25

hadoop运维之jobtracker无故停止服务

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


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

viewplaincopy



[*]12/07/0318:07:22INFOhdfs.DFSClient:ExceptionincreateBlockOutputStreamjava.io.EOFException
[*]12/07/0318:07:22INFOhdfs.DFSClient:Abandoningblockblk_-1772232086636991
[*]458_5671628
[*]12/07/0318:07:28INFOhdfs.DFSClient:ExceptionincreateBlockOutputStreamjava.io.EOFException
[*]12/07/0318:07:28INFOhdfs.DFSClient:Abandoningblockblk_-2108024038073283869_5671629
[*]12
[*]/07/0318:07:34INFOhdfs.DFSClient:ExceptionincreateBlockOutputStreamjava.io.IOException:BadconnectackwithfirstBadLinkas192.168.1.25:50010
[*]12/07/0318:07:34INFOhdfs.DFSClient:Abandoning
[*]blockblk_-6674020380591432013_5671629
[*]12/07/0318:07:40INFOhdfs.DFSClient:ExceptionincreateBlockOutputStreamjava.io.IOException:BadconnectackwithfirstBadLinkas192.168.1.26:50010
[*]12/07/0
[*]318:07:40INFOhdfs.DFSClient:Abandoningblockblk_-3788726859662311832_5671629
[*]12/07/0318:07:46WARNhdfs.DFSClient:DataStreamerException:java.io.IOException:Unabletocreatenewblock.
[*]ator
[*]g.apache.hadoop.hdfs.DFSClient$DFSOutputStream.nextBlockOutputStream(DFSClient.java:3002)
[*]atorg.apache.hadoop.hdfs.DFSClient$DFSOutputStream.access$2000(DFSClient.java:2255)
[*]atorg.apache.hadoop.hd
[*]fs.DFSClient$DFSOutputStream$DataStreamer.run(DFSClient.java:2446)
[*]
[*]12/07/0318:07:46WARNhdfs.DFSClient:ErrorRecoveryforblockblk_-3788726859662311832_5671629baddatanodenodes==null
[*]12/07
[*]/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包:

viewplaincopy



[*]2012-07-0318:07:27,316INFOorg.apache.hadoop.hdfs.StateChange:BLOCK*NameSystem.allocateBlock:/tmp/hadoop-hadoop/mapred/staging/
[*]hadoop/.staging/job_201206270914_17301/job.jar.blk_-2108024038073283869_5671629

再到相应的datanode 上去查看日志,发现没有该文件块的信息,这下问题出来了:jobtracker向namenode申请了mapred作业配置的存储资源,且namenode正确的分配了资源(datanode 列表),然后jobtracker再联系datanode时报错了,但是当时datanode还处于正常工作中(有运行中的数据加载业务),那么,是什么原因导致jobtracker在向datanode写入数据时失败了呢?
于是再仔细查看问题发生时datanode上的日志,发现这么一条日志信息:

viewplaincopy



[*]2012-07-0318:07:10,274ERRORorg.apache.hadoop.hdfs.server.datanode.DataNode:DatanodeRegistration(192.168.1.25:50010,storageID=DS
[*]-841642307-50010-1324273874581,infoPort=50075,ipcPort=50020):DataXceiver
[*]java.io.IOException:xceiverCount257exceedsthelimitofconcurrentxcievers256

百度了下错误信息:xceiverCount 257 exceeds the limit of concurrent xcievers 256的含义,发现报错的原因主要是因为配置项:
viewplaincopy



[*]<property>
[*]<name>dfs.datanode.max.xcievers</name>
[*]<value>256</value>
[*]</property>

dfs.datanode.max.xcievers 对于datanode来说,就如同linux上的文件句柄的限制,当datanode 上面的连接数操作配置中的设置时,datanode就会拒绝连接。
好了,问题找到了,只要找机会修改集群所有datanode节点的配置,将dfs.datanode.max.xcievers参数修改大一些即可。
页: [1]
查看完整版本: hadoop运维之jobtracker无故停止服务