HDFS体系结构

  • lNameNode

  • lDataNode

  • Secondary NameNode

  • 事务日志

  • 映像文件

 

 

HDFS体系结构

  1. NameNode

  • 管理文件系统的命名空间
  • 记录每个文件数据块在各个DataNode上的位置和副本信息
  • 协调客户端对文件的访问
  • 记录命名空间内的改动或空间本身属性的改动
  • NameNode使用事物日志记录HDFS元数据的变化。使用映像文件存储文件系统的命名空间,包括文件映射,文件属性等。

2.DataNode

  • 负责所在物理节点的存储管理
  • 一次写入,多次读取(不能修改)
  • 文件由数据块组成,典型的块大小是64M
  • 数据块尽量散布到各个节点

读取数据流程

  • 客户端要访问HDFS中的一个文件
  • 首先从namenode获得组成这个文件的数据快文职列表
  • 根据列表知道存储数据块的datanode
  • 访问datanode获取数据
  • namenode不参与数据实际传输

HDFS的可靠性

  • 冗余副本策略
  1. 可以在hdfs-site.xml中设置复制因子制定副本数量
  2. 所有数据块都有副本
  3. Datanode启动时,遍历本地文件系统,产生一份hdfs数据块和本地文件的对应关系列表(blockreport)汇报给namenode
  • 机架策略
  1. 集群一般放在不同的机架上,机架间宽带要比机架内宽带要小
  2. HDFS的机架感知
  3. 一般在本机架存放一个副本,在其它几家在存放别的副本,这样可以防止机架失效时丢失数据,也可以提高宽带利用率。
  • 心跳机制
  1. Namenode周期性从datanode接受心跳信号和块报告
  2. namenode根据块报告验证元数据,以及更新
  3. 没有按时发送心跳的datanode会被标记为宕机,不会再给他任何I/O请求
  4. 如果datanode失效造成副本数量下降,并且低于预先设置的阈值,namenode会检测出这些数据块,并在合适的时机进行重新复制
  5. 引发重新复制的原因还包括数据副本本身损坏、磁盘错误,复制因子被增大等。
  • 安全模式
  1. Namenode启动时会先经过一个“安全模式”阶段
  2. 安全模式阶段不会产生数据写
  3. 在此阶段Namenode收集各个datanode的报告,当数据块达到最小副本数以上时,会被认为是“安全”的
  4. 在一定比例(可设置)的数据块被确定为安全后,再过若干时间,安全模式结束
  5. 当检测到副本数不足的数据块时,该块会被复制直到达到最小副本数
  • 校验和
  1. 在文件创立时,每个数据块都产生校验和
  2. 在校验和作为单独一个隐藏文件保存在命名空间下
  3. 客户端获取数据时可以检查校验和是否相同,从而发现数据块是否损坏
  4. 如果正在读取的数据块损坏,则可以继续读取其它副本
  • 回收站
  1. 删除文件时,其实是放入回收站/trash
  2. 回收站里的文件可以快速恢复
  3. 可以设置一个时间阈值,当回收站里文件的存放时间超过这个阈值,就被彻底清除,并且释放所占用的数据块
  • 元数据保护
  1. 映像文件刚和事物日志是Namenode的核心数据。可以配置为拥有多个副本
  2. 副本会降低Namenode的处理速度,但增加安全性
  3. Namenode依然是单点,如果发生故障要手工切换
  • 快照机制
  1. 支持存储某个时间的映像,需要时可以使数据重返这个时间点的状态