我已经设置了一个 Hadoop 高可用性集群,包括 3 个节点作为主节点(3 个日志节点、事件名称节点和备用名称节点,没有辅助名称节点)和 3 个数据节点。 使用命令
hadoop-daemon.sh 启动 journalnode
hadoop-daemon.sh 启动namenode
hadoop-daemon.sh 启动zkfc
我启动 namenode 服务并使用命令 hadoop-daemon.sh start datanode
我启动 datanode 服务。
问题是当我故意使用命令停止数据节点时一个事件的节点,我认为名称节点不会检测到数据节点的故障!
最佳答案
对于 future 的读者,来自 here :
在以下情况下,数据节点被认为是陈旧的:
dfs.namenode.stale.datanode.interval < last contact < (2 * dfs.namenode.heartbeat.recheck-interval)
在 NameNode UI Datanodes 选项卡中,一个陈旧的 datanode 将脱颖而出,因为在事件的 datanodes 中具有更大的 Last contact 值(也可在 JMX 输出中获得)。当数据节点陈旧时,它将被赋予最低的读写优先级。
使用默认值,名称节点将在其心跳不存在 30 秒时认为数据节点已失效。再过 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
关于hadoop - Namenode 不检测数据节点故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48354481/