图2.1 HDFS文件系统的架构图
(1)hadoop的信息的传递主要依靠心跳机制:依靠传递packet来想Datanode写入数据,一个packet由多个数据chunk组成,每个chunk对应这一个校验和,当chunk的数目足够多的时候,packet会被写入Dataqueue。其中packet包含两种:心跳packet(里面不含有任何chunk,4个字节存储packet的长度,8个字节存储呢packet在block中的偏移量,8个字节存储呢在Block中的序列号,1个字节用于标识该packet是否是block中的最后一个packet)与数据packet。
(2)在发送packet之前,DataStreamer类首先会从Namenode中获得blockid与block的位置信息,然后会循环的从Dataqueue中取得第一个packet,然后将该packet写入与Datanode所建立的socket 中。当属于一个block的所有packet都发送给Datanode,并且返回了与每个packet所对应的相应信息之后,DataStream会关闭当前的数据block。
(3)在写入数据的时候DataNode节点会在Out/InStream就是数据包传输的管道线性排列,然后会依次按照将数据写入DataNode,然后会按照原路依次向上返回响应的信息,最终返回给客户端,使用responseprocessor用来处理客户端向DataNode发送数据后响应,因为每一个数据包(packet)在DataNode接受之后会有一个反馈,该线程会在客户端运行并且处理的packet的信息也不是最后一个是时候,会循环处理来自DataNode中的响应,如果返回的是失败的响应会记录下索引并抛出异常;在客户端会创建两个队列如Dataqueue与ackqueue队列,其中前一个用来存储将要发送的数据包,而后一个是用来保存已经发送,但是没有收到确认信息的数据包。
有一个文件FileA,100M大小。Client将FileA写入到HDFS上。
HDFS按默认配置。
HDFS分布在三个机架上Rack1,Rack2,