HDFS组成架构与读写数据流程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33054265/article/details/87382270

HDFS组成架构

HDFS组成架构图
HDFS采用Master/Slave的架构来存储数据,这种架构主要由四个部分组成,分别为HDFS Client、NameNode、DataNode和Secondary NameNode。

  1. Client:客户端。
    (1)文件切分:文件上传HDFS时,Client将文件切分成一个一个的数据块(Block),然后进行上传。
    (2)与NameNode交互,获取文件的位置信息。
    (3)与DataNode交互,读取或者写入数据。
    (4)提供一些命令来管理HDFS,比如NameNode格式化。
    (5)通过一些命令访问HDFS,比如对HDFS进行增删查改。
  2. NameNode:就是Master,是一个主管。
    (1)管理HDFS的名称空间
    (2)配置副本策略
    (3)管理Block映射信息
    (4)处理客户端读写请求
  3. DataNode:就是Slave,NameNode下达命令,DataNode执行实际的操作。
    (1)存储实际的Block
    (2)执行数据块的读写操作
  4. Secondary NameNode:并不是NameNode的热备,当NameNode挂掉时,它并不能马上替换NameNode并提供服务。
    (1)辅助NameNode,分担其工作量,比如定期合并Fsimage和Edits,并推送给NameNode。
    (2)在紧急情况下,可辅助恢复NameNode。

HDFS读写数据流程

HDFS写数据流程
HDFS写数据流程:

  1. Client通过Distributed FileSystem模块向NameNode请求上传文件,NameNode检查目录文件是否已存在。
  2. NameNode返回是否可以上传。
  3. Client请求第一个Block上传到哪几个DataNode服务器上。
  4. NameNode返回3个DataNode节点(replication的默认值为3),假设分别为dn1,dn2,dn3。
  5. Client通过FSDataOutputStream模块请求dn1上传数据,dn1收到请求后会继续调用dn2,然后dn2调用dn3,将这个通信管道(pipeline)建立完成。
  6. dn1,dn2,dn3逐级应答客户端。
  7. Client开始以packet为单位往dn1上传第一个Block,dn1收到一个packet就会传给dn2,dn2再传给dn3;dn1每传一个packet会放入一个应答队列等待应答。
  8. 当一个Block传输完成之后,客户端再次请求NameNode上传第二个Block的DataNode服务器,重复3-7步,直到文件全部上传完毕。
    hdfs读数据流程
    HDFS读数据流程:
  9. Client通过Distributed FileSystem向NameNode请求下载文件,NameNode通过查询元数据,找到文件块所在的DataNode地址。
  10. 挑选一台DataNode服务器(就近原则),请求读取数据。
  11. DataNode开始传输数据给客户端(从磁盘读取数据输入流,以packet为单位来做校验)。
  12. Client以packet为单位接收,先在本地缓存,然后写入目标文件。

猜你喜欢

转载自blog.csdn.net/qq_33054265/article/details/87382270