早晨看到报警发现2个dead Datanode,查看系统日志发现当时的负载持续高位导致datanode超时没有发送心跳被DatanodeManager摘除,进一步发现高负载是因为一个Job的小文件太多而没有进行map file合并导致在这2台节点上同时起的MAP太多导致的,解决方法参考:http://boylook.blog.51cto.com/7934327/1298651
这里主要看看HeartbeatManager 对datanode心跳处理流程:
HeartbeatManager会启动一个Daemon线程heartbeatthread,每5秒活动一次,其中每heartbeatRecheckInterval(默认5分钟)秒做一次心跳检测;这个过程会调用datanodemanager去检查datanode的lastupdate,如果超过heartbeatExpireInterval(= 2 * heartbeatRecheckInterval
+ 10 * 1000 *heartbeatIntervalSeconds(默认3秒钟))则认为datanode已经dead,从heartbeatmanager,blockmanager和networktopology中删除该datanode的信息;
和高负载的持续时间也是吻合的,调整了MAP合并后解决.
本文转自MIKE老毕 51CTO博客,原文链接:http://blog.51cto.com/boylook/1301896,如需转载请自行联系原作者