HDFS数据组织是分阶段的
客户创建一个文件的请求并不是马上到达NameNode,实际上,HDFS客户把文件数据先存放到本地的一个临时文件上,应用程序间接地向这个文件写数据。当本地文件数据积累到超过一个块的容量时,HDFS客户联系NameNode。NameNode把文件名插入到文件系统结构中,并为之分配数据块。NameNode向客户返有datanode和目标文件块的请求。然后客户把本地的缓存文件flush到指定datanode的数据块中。当文件关闭时,本地剩下未冲刷的数据将转移到datanode中,然后客户高树NameNode文件已经关闭。如果NameNode在文件关闭之前死掉了,那文件将会丢失。
HDFS复制流水线
假设HDFS文件副本数为3,当客户写数据到HDFS文件时,数据先写到本地文件,当本地文件积累到满一个块时,客户冲NameNode找到3个datanode。客户向第一NameNode flush数据块。第一个datanode开始接收一小部分数据(4KB),把每一小部分数据写入本地仓库并且把这部分数据向第二个datanode传输,第二个datanode开始接收数据,写人本地仓库并向第三个datanode传输数据,第三个datanode接收数据后写人本地仓库。就这样一个datanode可以通过管道从前一个datanode的中接收数据并同时把数据通过管道写入下一个datanode中,数据就这样在管道中从一个datanode传输到下一个datanode。