首页 理论教育 HDFS健壮性探究:实现数据存储可靠性与强大的Data-node标记功能

HDFS健壮性探究:实现数据存储可靠性与强大的Data-node标记功能

时间:2023-06-30 理论教育 版权反馈
【摘要】:HDFS的主要目标就是实现在失败情况下的数据存储可靠性。Namenode通过心跳包的缺失检测到这一情况,并将这些Data-node标记为dead,不会将新的IO请求发给它们。这个同步操作可能会降低Namenode每秒能支持处理的namespace事务。目前,在另一台机器上重启因故障而停止服务的Namenode这个功能还没实现。

HDFS健壮性探究:实现数据存储可靠性与强大的Data-node标记功能

HDFS的主要目标就是实现在失败情况下的数据存储可靠性。常见的三种失败为Name-node failures、Datanode failures和网络分割(Network partitions)。

1.硬盘数据错误、心跳检测和重新复制

每个Datanode节点都向Namenode周期性地发送心跳包。网络切割可能导致一部分Da-tanode跟Namenode失去联系。Namenode通过心跳包的缺失检测到这一情况,并将这些Data-node标记为dead,不会将新的IO请求发给它们。寄存在dead Datanode上的任何数据将不再有效。Datanode的死亡可能引起一些block的副本数目低于指定值,Namenode不断地跟踪需要复制的block,在任何需要的情况下启动复制。在下列情况可能需要重新复制:某个Data-node节点失效、某个副本遭到损坏、Datanode上的硬盘错误或者文件的replication因子增大。

2.集群均衡

HDFS支持数据的均衡计划,如果某个Datanode节点上的空闲空间低于特定的临界点,那么就会启动一个计划自动地将数据从一个Datanode搬移到空闲的Datanode。当对某个文件的请求突然增加时,也可能启动一个计划创建该文件新的副本,并分布到集群中以满足应用的要求。这些均衡计划目前还没有实现。(www.xing528.com)

3.数据完整性

从某个Datanode获取的数据块有可能是损坏的,这个损坏可能是由于Datanode的存储设备错误、网络错误或者软件bug造成的。HDFS客户端软件实现了HDFS文件内容的校验和。某个客户端创建一个新的HDFS文件,会计算这个文件每个block的校验和,并作为一个单独的隐藏文件保存这些校验和在同一个HDFS namespace下。客户端检索文件内容,它会确认从Datanode获取的数据跟相应的校验和文件中的校验和是否匹配,如果不匹配,客户端可以选择从其他Datanode获取该block的副本。

4.元数据磁盘错误

FsImage和Editlog是HDFS的核心数据结构。如果这些文件损坏了,整个HDFS实例都将失效。因而,Namenode可以配置成支持维护多个FsImage和Editlog的拷贝。任何对FsIm-age或者Editlog的修改,都将同步到它们的副本上。这个同步操作可能会降低Namenode每秒能支持处理的namespace事务。这个代价是可以接受的,因为HDFS是数据密集的,而非元数据密集。当Namenode重启时,它总是选取最近的一致的FsImage和Editlog使用。Nam-enode在HDFS是单点存在,如果Namenode所在的机器错误,手工的干预是必需的。目前,在另一台机器上重启因故障而停止服务的Namenode这个功能还没实现。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈