Hadoop--HDFS之读写流程

  之前的博客,HDFS NameNodeHDFS DataNode 让我们对HDFS两个重要的角色,NameNode和DataNode有了一定的认识。NameNode负责维护元数据信息,DataNode负责Block块数据的存储。HDFS的设计就是一次写入,多次读取,不支持文件修改,所以呢,文件的读写就变得相当重要,下面我们就一起来看一看HDFS文件的读写流程吧!

写入文件

  • DataNode的写操作流程 可以分为两部分:
  1. 准备工作,包括与NameNode的通信等;
  2. 真正的写操作。
  • 准备工作
    准备工作
  1. HDFS client先会去询问NameNode,看哪些DataNode可以存储文件。文件的拆分是在HDFS client中完成的,比如拆分成ABC
  2. NameNode查看它的元数据信息,发现DataNode 127上有空间可以存储Block A,于是将此信息告诉HDFS Client。
  3. HDFS Client接到NameNode返回的DataNode列表信息后,它会直接联系第一个DataNode1,让它准备好接收Block A(建立TCP连接)。
  4. 在DataNode1建立好TCP连接后它会把HDFS Client要写Block A请求顺序传给DataNode2(在与HDFS Client建立好TCP连接后从HDFS Client获得的DataNodeli信息),同理传递给DataNode7。
  5. 当DataNode7准备好后,会回传信息过来,HDFS Client接到信息后表示都准备好了,就可以写数据了。
  • 写入数据
    写入数据
  1. HDFS Client开始往DataNode1写入Block A数据。同准备工作一样,当DataNode1接收完Block A数据后,它会顺序将Block A数据传输给DataNode2,然后DataNode2再传输给DataNode7。
  2. 每个DataNode在接收完Block A数据后,会发消息给NameNode,告诉它Block数据已经接收完毕。
  3. NameNode同时会根据它接收到的消息更新它保存的文件系统元数据信息。
  4. Block A 成功写入3个DataNode之后,DataNode1会发送一个成功信息给HDFS Client,同时HDFS Client也会发一个Block A成功写入的信息给NameNode。之后,HDFS Client才能开始继续处理下一个Block-Block B。

读取文件

  • 读取文件
    读取文件
  1. HDFS Client会先去联系NameNode,询问file.txt总共分为几个Block而且这些Block分别存放在哪些DataNode上
  2. 由于每个Block都会存在几个副本,所以NameNode会把file.txt文件组成的Block所对应的所有DataNode列表都返回给HDFS Client。
  3. 然后HDFS Client会选择DataNode列表里的第一个DataNode去读取对应的Block。比如由于Block A存储在DataNode1,2,7,那么HDFS Client会到DataNode1去读取Block A;Block C存储在DataNode,7,8,9,那么HDFS Client就回到DataNode7去读取Block C。

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器