Datanode周期性的向Namenode发送心跳信息,心跳信息的发送通过sendHeartbeat方法来完成。sendHeartbeat向Namenode表明Datanode依然存活并且完好。sendHeartbeat还向Namenode传输一些Datanode的状态信息,包括Datanode的容量、Datanode DFS消耗的容量、Datanode还可以使用的容量等。最后Namenode向Datanode返回一系列的DatanodeCommand以控制Datanode执行一些操作。DatanodeCommand主要有以下几种类型:
DNA_UNKNOWN = 0; // unknown action(未知的操作)
DNA_TRANSFER = 1; // transfer blocks to another datanode(传输blocks到别的Datanode)
DNA_INVALIDATE = 2; // invalidate blocks(使blocks失效)
DNA_SHUTDOWN = 3; // shutdown node(关闭Datanode)