乐趣区

关于hadoop:HDFS-NameNode如何感知到DataNode的

注册

在 HDFS – HDFS 的四个角色提到了 NameNode 启动的时候,会开启 RPC 服务,叫做 ServiceRpcServer,这个 Server 有很多个协定,其中一个叫做 DatanodeProtocol 协定,用来响应 DataNode 的申请,比方注册、心跳、block 报文解决等。

DataNode 启动的时候,会依据 NameNode 的地址,把本人的 IP 地址、端口、主机名等信息,发送给 NameNode 进行注册,为了使注册胜利,DataNode 会始终重试,直至胜利。

NameNode 接管到申请后,他会验证一下本人是否曾经启动实现,如果曾经胜利就把 DataNode 的信息退出到内存 DatanodeManager.datanodeMap 实现注册,并且加到 HeartbeatManager.datanodes,HeartbeatManager 次要是用于治理心跳的。这些都实现后,就会判断是否进入平安模式,平安模式上章节曾经讲了。

心跳

注册胜利后,DataNode 每隔三秒中就会给 NameNode 发送心跳。
NameNode 接管到心跳申请后,也会先判断本人是否曾经启动。
因为注册的时候,会把 DataNode 的信息保留在 DatanodeManager.datanodeMap 中,所以发送心跳的时候,会先验证是否在这个内存中,如果不在,阐明没有注册过。
如果曾经注册过,会通过 HeartbeatManager 更新最初一次的心跳工夫。
咱们留神到,每次心跳 NameNode 都会返回一些指令,在 Hadoop 中,NameNode 并没有发送指令给 DataNode,须要通过 DataNode 发送心跳后,返回指令给 DataNode。

剔除

当 NameNode 发现一个 DataNode 曾经长时间没有发送心跳信息了,就会把他剔除下线。
HeartbeatManager 中有一个线程,默认每 5 分钟会查看一次,这个工夫由 dfs.namenode.heartbeat.recheck-interval 设置的。
HeartbeatManager 查看的时候,会遍历所有的 datanodes,判断每个 datanode 是否曾经死亡,如果曾经死亡,就把他从内存中删除掉。剔除掉后,就会判断是否进入平安模式。
判断是否死亡的工夫是由上面的公式计算的,heartbeatRecheckInterval 默认 5 福州,heartbeatIntervalSeconds 就是心跳的工夫,默认 3 秒,所以就是 10 分钟 +30 秒,也就是说,DataNode 在 630 秒后还是没有发送心跳信息,NameNode 就当作他曾经死亡了,并且从内存中剔除。

2 heartbeatRecheckInterval + 10 1000 * heartbeatIntervalSeconds

退出移动版