后,主控节点RPC的Server服务开启之后,数据节点才能开始启动。数据节点主要有DataStorage、Server、DataXceiverServer、DataNodeProtocol四个服务组件,其中Datastorage保存数据块信息,DataNodeProtocol负责调用主控节点的服务,DataXceiverServer负责客户端和数据节点之间的数据传输,数据节点的Server负责为客户端和其它数据节点提供服务。HDFS集群启动时,每个数据节点都要向主控节点发送注册的请求,在请求通过后才可以加入HDFS集群中。数据节点调用DatanodeProtocol协议向主控节点进行注册,数据节点向主控节点注册有两个目的:首先是通告主控节点其提供的服务的网络地址端口,其次是获取数据节点对其的管理与控制。每一个客户端无需获取集群中所有的数据节点的服务地址,主控节点会记录所有的数据节点信息。客户端通过主控节点来获取需要访问的数据节点的信息即可。主控节点记录所有的数据节点汇报的状态信息,根据数据节点的状态信息调整集群的负载均衡与任务的合理安排和调度。在HDFS启动过程中,数据节点需要向控制节点汇报状态信息,这些信息包括磁盘容量,块状态等信息。数据节点的状态信息需要定时和控制节点汇报。这些信息是通过一种叫做心跳协议的方式从数据节点汇报给控制节点的,心跳协议能够及时的汇报每个数据节点的状态信息,通过设计优化的心跳协议可以向控制节点汇报更多的状态信息。通过汇报的状态信息,可以为节点选择策略提供更多依据,基于更多的依据就可以更加准确的判断一个节点的负载,可以保证选择的节点是比较空闲的数据节点。3.3.2HDFS的数据存取过程客户端访问HDFS一般都是通过调用Hadoop提供的API实现的,而底层数据操作的过程对客户端是透明的。下面分别从数据读取和写入两方面介绍对HDFS数据操作进行剖析。