早晨看到报警发现2dead Datanode,查看系统日志发现当时的负载持续高位导致datanode超时没有发送心跳被DatanodeManager摘除,进一步发现高负载是因为一个Job的小文件太多而没有进行map file合并导致在这2台节点上同时起的MAP太多导致的,解决方法参考:http://boylook.blog.51cto.com/7934327/1298651

这里主要看看HeartbeatManager datanode心跳处理流程:

HeartbeatManager会启动一个Daemon线程heartbeatthread,每5秒活动一次,其中每heartbeatRecheckInterval(默认5分钟)秒做一次心跳检测;这个过程会调用datanodemanager去检查datanodelastupdate,如果超过heartbeatExpireInterval= 2 * heartbeatRecheckInterval

+ 10 * 1000 *heartbeatIntervalSeconds(默认3秒钟))则认为datanode已经dead,从heartbeatmanager,blockmanagernetworktopology中删除该datanode的信息;

和高负载的持续时间也是吻合的,调整了MAP合并后解决.