Hadoop基础(二)

hadoop.jpg

HDFS 读写流程

我们知道在HDFS中我们的文件按数据块进行存储,那么当我们写入或者读取一个文件的时候HDFS到底进行了哪些操作呢?

HDFS 写流程

write.png

如上图所示,假如我们有一个四个节点的集群,并且我们将数据备份个数设置成3个。当我们写入一个文件到HDFS集群的时候:

  1. 首先,HDFS Client和NameNode建立连接,告诉NameNode要存储一个文件。NameNode维护着DataNode的列表,知道哪些DataNode上面还有空间可以进行存储。
  2. NameNode通过查看存储的元数据信息,发现DataNode1,2,3上可以进行存储。于是他将此信息返回给HDFS Client。
  3. HDFS Client接受到NameNode的返回的DataNode列表后,Client会与距离最近DataNode1建立连接,让其准备好接收数据。然后将文件进行分块,将数据块1和NameNode返回的DataNode列表信息一起发送给DataNode1.
  4. DataNode1通过列表信息得知要发送给DataNode2.所以DataNode1将数据与列表信息发送给DataNode2.DataNode2又发送给DataNode3,此时数据块1已经存储完成并备份了三份。
  5. 当DataNode1,2,3都接收并存储数据块1后,会向NameNode发送信息,告知已经接收到了数据块1.并把数据块1相关信息发送给NameNode,NameNode更新元数据信息并 与Client通信告知数据块1已经存储完毕。然后Client开始进行数据块2的存储。

HDFS 读流程

read.png

如上图所示,假如我们有一个四个节点的集群,当我们想读取一个存在HDFS中的文件的时候,步骤如下:

  1. HDFS Client与NameNode建立链接,告诉NameNode要读取文件xxx。
  2. NameNode通过查询自己的元数据信息,得到文件xxx的数据块映射信息及存储数据块的DataNode列表。然后将这些信息发送给Client。
  3. Client得到这些信息之后,寻找最近可用的DataNode1.取回数据块1.从DataNode2取回数据块2. 自此成功读取文件xxx
  4. 如果DataNode2出现问题挂掉了,则从DataNode3进行数据块读取。
posted @ 2017-12-07 16:43  叁金  阅读(154)  评论(0编辑  收藏  举报