注册
在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