HDFS架构组成以及读写机制

概念:

hdfs是一个主从式分布式文件管理系统,通过目录树来管理文件,由多台服务器联合起来实现其功能,集群中的服务器有各自的角色

优点:

1、高容错性

  • 数据自动保存多个副本。他通过增加副本的形式,来提高容错性;
  • 某一个副本丢失的时候,能够自动恢复

2、适合大数据处理

  • 数据规模:能够处理的文件能够达到GB、TB、甚至PB
  • 文件规模:能够处理百万规模以上的数据,数量相当之大

3、可构建在廉价的机器上,通过多副本机制提高可靠性

缺点:

1、不适合低延时数据访问,比如毫秒级别的数据储存是做不到的
2、无法高效地对大量小文件进行存储

  • 储存大量小文件的话,会占用NameNode的内存来储存文件的元数据,而NameNode的内存是有限的
  • 小文件存储的寻址时间会超过读取时间,因为大量小文件存储进来会增加NameNode中元数据的数量,会影响寻址时间
    3、不支持并发写入、文件随机修改
  • 一个文件只能有一个写,不允许多个线程同时写
  • 只能对数据进行append(追加)操作,不支持文件的随机修改

HDFS架构

HDFS架构组成以及读写机制
架构主要有四部分组成,Client、NameNode、SecondaryNameNode、DataNode。
1、Client:客户端
(1)、文件拆分:文件上传HDFS时,会将文件拆分成一个一个的blocak块,储存起来(默认情况下一个block是128M,假如有两个文件分别是100M,90M,会储存到两个block块中)
(2)、与NameNode交互,获取储存文件的datanode的信息
(3)、与DataNode交互,上传或者读取数据
(4)、提供一些命令来管理hdfs,比如开启关闭
(5)、通过一些命令来访问hdfs
2、NameNode:就是Master,是一个管理者
(1)、管理namenode的名称空间(不是很懂这一点)
(2)、管理block块的映射信息
(3)、配置副本策略(默认)
(4)、处理客户端的读写请求
3、DataNode:就是slave,NameNode下达指令,DataNode执行操作
(1)、储存实际的数据块
(2)、执行数据块的读写操作
4、SecondaryNameNode:并非是namenode的热备,当namenode挂掉时不能立即提供服务
(1)、辅助NameNode,为其分担工作量
(2)、定期合并Fsimage和Edits,并推送给namenode
(3)、可以辅助恢复namenode

HDFS写流程

如下图:
HDFS架构组成以及读写机制
1、客户端通过Distributed FileSystey模块向NameNode发送上传文件的请求,NameNode检查目标文件是否存在,父目录是否存在
2、NameNode响应客户端是否可以上传
3、客户端请求上传第一个block块,请求datanode节点
4、NameNode返回三个DataNode节点,分别是dn1、dn2、dn3
5、客户端向dn1发送建立block传输通道的请求,dn1收到请求后会继续调用dn2,dn2调用dn3,直到整个通道建立完成
6、dn1、nd2、dn3逐级响应客户端
7、客户端开始往dn1上传第一个block块(先从磁盘读取数据放到内存缓存中),以packet的形式,dn1传给dn2,dn2传给dn3
8、当第一个block快上传完成后,再向NameNode请求上传第二个block块的服务器(重复3-7),直到数据传输完成

HDFS写流程

如下图
HDFS架构组成以及读写机制
1、客户端通过Distributed FileSystey模块向NameNode发送请求,NameNode通过查询元数据,找到文件块所在的DataNode
2、NameNode向客户端返回目标文件的元数据,客户端选取一个datenode(根据就近原则,然后随机),请求读取数据
3、DataNode开始传输数据给客户端(从磁盘里读取数据输入流,以packet为单位校验)
4、客户端以packet为单位接收,先写入缓存中,在写入目标文件中