1、冗余副本策略

可以在 hdfs-site.xml 中设置复制因子指定副本数量。

所有数据块都可副本。

DataNode 启动时,遍历本地文件系统,产生一份 HDFS 数据块和本地文件的对应关系列表(BlockReport)汇报给 NameNode。

2、机架策略

HDFS 的“机架感知”,通过节点之间发送一个数据包,来感应它们是否在同一个机架。

一般在本机架放一个副本,在其他机架再存放一个副本,这样可以防止机架失效时丢失数据,也可以提高带宽利用率。

3、心跳机制

NameNode 周期性从 DataNode 接受心跳信息和块报告。

NameNode 根据块报告验证元数据。

没有按时发送心跳的 DataNode 会被标记为宕机,不会再给他任何 I/O 请求。

如果 DataNode 失效造成副本数量下降,并且低于预先设定的值,NameNode 会检测出这些数据库,并在合适的时机重新复制。

引发重新复制的原因还包括数据副本本身损坏,磁盘错误,复制因子被增大等。

4、安全模式

NameNode 启动时会先经过一个“安全模式”阶段。

安全模式阶段不会产生数据写。

在此阶段 NameNode 收集各个 DataNode 的报告,当数据块达到最小副本数以上时,会被认为是“安全”的。

在一定比例(可设置)的数据块被确定为“安全”后,再过若干时间,安全模式结束。

当检测到副本数不足的数据块时,该块会被复制,直到达到最小副本数。

5、效验和

在文件创立时,每个数据块都产生效验和。

效验和会作为单独一个隐藏文件保存在命名空间下。

客户端获取数据时可以检查效验和是否相同,从而发现数据块是否损坏。

如果正在读取的数据块损坏,则可以继续读取其他副本。

6、回收站

删除文件时,其实是放入回收站Trash。

回收站里的文件是可以快速恢复的。

可以设置一个时间值,当回收站里文件的存放时间超过了这个值,就被彻底删除,并且释放占用的数据块。

7、元数据保护

映像文件和事物日志是 NameNode 的核心数据,可以配置为拥有多个副本。

副本会降低 NameNode 的处理速度,但增加安全性。

NameNode 依然是单点,如果发生故障需要手工切换。