目录
- HDFS架构
- Namenode&DataNode&SecondaryNameNode
- 副本存放策略
HDFS为主/从架构,主要由管理文件系统的NameNode和存储数据的DataNode组成。
NameNode介绍及作用 :
-
NameNode维护以下内容
a. 管理文件名称
b. 管理文件目录结构
c. 管理文件属性(创建时间、权限、副本数等)
d. 文件对应哪些数据块 => 数据块对应分布到哪些DataNode节点上,NameNode不会持久化存储这种映射关系,集群在启动和运行时,DataNode会定期发送blockreport给NameNode,从而NameNode在内存中动态维护这种映射关系 -
作用
a. 管理文件系统的命名空间
b. 维护文件系统树,以两种文件永久保存在磁盘
c. 命名空间镜像文件fsimage
d. 编辑日志editlog
DataNode介绍及作用:
- 主要是用来对文件数据块的读写。存储数据块和块的校验,因为数据在网络的传输中可能存在数据丢失的问题,所以需要校验。同时,DataNode要保持与NameNode的通信,一般每3秒发送一次heartbeat包,每10次heartbeat(30秒)发送一次bloackreport给Namenode。
SecondaryNameNode:
- 存储fsimage和editlog
- 定期合并fsimage和editlog生成新的fsimage文件并返回给NameNode,也就是checkpoint.周期默认为3600秒,一般生成上为1200秒或者更少。
- fsimage:镜像文件,记录文件系统目录树,是全量记录。
- editlog: 编辑日志,记录所有的读写操作,是增量记录。
- SecondaryNameNode通信NameNode准备提交editlog,此时NameNode开始产生edit.new,SecondaryNameNode获得之前得fsimage和editlog后合并产生一个fsimage.ckpt(同时也备份了fsimage和editlog),同时把这个fsunage.ckpt返回给NameNode,然后NameNode获得fsimage.ckpt之后将fsimage.ckpt和edits.new重命名为fsimage何editlog
- 当NameNode挂掉的时候,SecondaryNameNode代替NameNode时将会丢失最近一个checkpoint到现在的editing,但会还原最近一个checkpoint生产的fsimage.
副本存放策略
一般来说,数据是以block存储在DataNode节点上。假如说,在DataNode节点上提交文件,那么第一个块就是存储在这个节点上(选择最近的一个),如果不是在DataNode节点上提交的,就随即挑选一个磁盘合适CPU负荷的节点。第二个block存储在不同机架上的一个节点,而第三个block存储在与第二个block相同机架上的不同节点(假设副本数为3)。
部分图片与内容引用自官网:
https://hadoop.apache.org/docs/r2.7.7/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html