Hadoop培训教程:HDFS的健壮性设计
最新学讯:近期OCP认证正在报名中,因考试人员较多请尽快报名获取最近考试时间,报名费用请联系在线老师,甲骨文官方认证,报名从速!
我要咨询HDFS的主要目标就是实现在失败情况下数据存储的可靠性。常见的三种失败情况是:NameNode failures、DataNode failures和网络分割(network partitions),这几种失败很容易导致HDFS中的组件失效。下面将分别从数据错误、集群均衡、数据完整性、元数据磁盘错误,以及快照五个方面阐述HDFS的健壮性设计。
1.数据错误
每个DataNode都向NameNode周期性地发送心跳包。网络切割可能会导致部分DataNode与NameNode失去联系。NameNode可通过心跳包的缺失检测到这一情况,并将这些DataNode标记为dead,不会向它们发送IO请求,寄存在dead DataNode上的任何数据将不再有效。DataNode的“死亡”可能引起一些Block的副本数目低于指定值,NameNode不断地跟踪需要复制的Block,并在需要的情况下启动复制。在下列情况中可能需要重新复制:某个DataNode失效、某个副本遭到损坏、DataNode上的硬盘错误,或者文件的replication因子增大。
2.集群均衡
HDFS支持数据的均衡计划,如果某个DataNode上的空闲空间低于特定的临界点,那么就会启动一个计划——自动将数据从一个DataNode搬移到空闲的DataNode。当对某个文件的请求突然增加,也可能会启动一个计划——创建该文件新的副本,并将此副本分布到集群中以满足应用的要求。
3.数据完整性
从某个DataNode获取的数据块有可能是已损坏的,损坏可能是由于DataNode的存储设备错误、网络错误或者软件bug造成的。HDFS客户端软件实现了HDFS文件内容的校验和。当某个客户端创建一个新的HDFS文件,会计算这个文件的每个Block的校验和,并作为一个单独的隐藏文件保存这些校验和在同一个HDFS namespace下。当客户端检索文件内容,它会确认从DataNode获取的数据跟相应的校验和文件中的校验和是否匹配,如果不匹配,客户端可以选择从其他DataNode获取该Block的副本。
4.元数据磁盘错误
FsImage和Editlog是HDFS的核心数据结构。这些文件如果损坏了,整个HDFS实例都将失效。因而,NameNode可以配置成支持维护多个FsImage和Editlog的副本。任何对FsImage或Editlog的修改,都将同步到它们的副本上。这个同步操作可能会降低NameNode每秒能支持处理的namespace事务。这个代价是可以接受的,因为HDFS是数据密集的,而非元数据密集。当NameNode重启的时候,它总是选取最近的、一致的FsImage和Editlog使用。
由于目前的HDFS是单NameNode设计,存在单点故障,如果NameNode所在的机器出现错误,手动干预是必须进行的。
5.快照
快照支持某个时间的数据副本,当HDFS数据损坏的时候,可以恢复到过去一个已知的正确时间点