记一次hadoop datanode进程问题分析
症状:datanode进程还在,但是在web ui接口发现该节点已经被置为dead节点。监测datanode进程日志,开始时一直狂刷很忙,后来停止刷新日志。
分析datanode进程日志,发现如下一些错误:
datanode.DataNode: PacketResponder java.io.IOException: Connection reset by peer
DataXceiver error processing WRITE_BLOCK operation java.io.IOException: Interrupted receiveBlock
java.io.EOFException: Premature EOF: no length prefix available
permanently terminating periodic scanner java.lang.OutOfMemoryError: Java heap space
Action: datanode process now is Xmx2048m 给datanode进程大一些 4G ? px集群现在是 xms3072m xmx8192m
transfering block BP-1538154135-172.17.254.17-1382076983184:blk_7146956383243812346_445834476 to mirror 172.17.254.102:50010: java.net.ConnectException: Connection timed out
DataXceiver error processing WRITE_BLOCK operation java.net.ConnectException: Connection timed out
主要是网络相关,可以看到 读写block的时候超时之类的。有可能是网络带宽问题,之前听同事们反馈这批网卡带宽不行。
查看主配置文件hdfs-site.xml
<name>dfs.balance.bandwidthPerSec</name><value>104857600</value> 100M
dfs.socket.timeout --1800000 30min
dfs.namenode.handler.count --20
python -c 'import math ; print int(math.log(32) * 20)' 64
Action: 根据<hadoop operations>的计算公式,建议改为64 计算得出69.
可以减少datanode向namenode汇报心跳超时之类的问题
Action:
dfs.datanode.socket.write.timeout 480000 8m
建议增大时长至20分钟
Action:
dfs.datanode.max.xcievers 4096
建议修改为8192 可以打开的文件数量更多,减少读写块时出错的机率