HDFS健壮性

HDFS的主要目标就是即使在出错的情况下也要保证数据存储的可能性。常见的三种出错情况是Namenode出错、Datanode出错和网络割裂,HDFS提供了多种错误恢复手段,保证了系统的健壮性。

  1. 磁盘数据错误,心跳检测和重新复制:每个Datanode节点周期性地向Namenode发送心跳信号。网络割裂可能导致一部分Datanode与Namenode失去联系。Namenode通过心跳信号的缺失来检测这一情况,并将这些近期不在发送心跳信号的Datanode标记为死机,不会再将新的IO发给它们。任何存储在死机Datanode上的数据不在有效。Datanode的死机可能会引起一些数据块的副本系数低于指定值,Namenode不断检测这些需要复制的数据块,一旦发现就启动复制操作。在下列情况,可能需要重新复制:某个Datanode节点失效,某个副本遭到损坏,Datanode上的硬盘错误。
  2. 集群均衡:HDFS的架构支持数据均衡策略。如果某个Datanode节点上的空闲空间低于特定的临界点,按照均衡策略系统就会自动地将数据从这个Datanode移动到其他空闲空间地Datanode。当对某个文件地请求增加时,也可能启动一个计划创建该文件夹新的副本,并且同时重新平衡集群中的其他数据。
  3. 数据的完整性:从某个Datanode获取的数据块有可能时损坏的,损坏可能是由Datanode的存储设备错误、网络错误或者软件漏洞造成的。HDFS客户端软件实现了对HDFS文件内容的校验和检查。当客户端创建一个新的HDFS文件时,会计算这个文件每个数据块和校验和,并将校验和作为一个单独的隐藏文件保存在同一个HDFS名字空间下。当客户端获取文件内容后,它会检验从Datanode获取的数据以及相应的校验和与文件中的校验和是否匹配,如果不匹配,客户端可以选择从其他Datanode获取该数据块的副本。
  4. 元数据磁盘错误:Fslmage和Editlong是HDFS的核心数据结构。如果这些文件损坏,整个HDFS实例都将失效。因而,Namenode可以配置成支持维护多个Fslmage和Editlong的副本。任何对Fslmage或者Editlong的修改,都将同步到他们的副本上。这种多副本的同步操作可能会降低Namenode每秒处理名字空间的事务数量。然而这个代价是可以接受的,因为即使HDFS的应用是密集的,他们也非元数据密集的。当Namenode重启的时候,它会选取最近的完整的Fslmage和Editlong来使用
  5. 快照:快照支持某一特定时刻的复制备份。利用快照,可以让HDFS在数据损坏时恢复到过去的一个已知正确的时间点。