我已经建立了一个Hadoop高可用集群,包括3个节点作为主节点(3个日志节点,活动名称节点和备用名称节点,没有辅助名称节点)和3个数据节点。 使用命令
hadoop-daemon.sh start journalnode
hadoop-daemon.sh start namenode
hadoop-daemon.sh start zkfc
我启动namenode服务并使用命令hadoop-daemon.sh start datanode
启动datanode服务。
问题是当我故意使用命令hadoop-daemon.sh stop datanode
停止datanode时,在名称节点WebUI中,(即使在活动和待机状态下)即使在几分钟之后,它仍被视为活动节点,我认为名称节点不是t检测datanode的失败!
答案 0 :(得分:2)
对于未来的读者,来自here:
在以下情况下,datanode被视为陈旧:
dfs.namenode.stale.datanode.interval<最后一次联系< (2 * dfs.namenode.heartbeat.recheck间隔)
在NameNode UI Datanodes选项卡中,由于实时数据节点之间的最后一次联系具有更大的值(在JMX输出中也可用),过时的datanode将脱颖而出。当datanode过时时,它将被赋予最低的读写优先级。
使用默认值时,namenode会在心跳不存在30秒时将其视为datanode陈旧。再过10分钟没有心跳(总共10.5分钟),数据节点被认为是死的。
相关属性包括:
dfs.heartbeat.interval - default: 3 seconds
dfs.namenode.stale.datanode.interval - default: 30 seconds
dfs.namenode.heartbeat.recheck-interval - default: 5 minutes
dfs.namenode.avoid.read.stale.datanode - default: true
dfs.namenode.avoid.write.stale.datanode - default: true