当前位置: Oracle DBA培训网-优技培训 >> Hadoop大数据 > Hadoop培训教程 >

Hadoop认证教程:HDFS的健壮性设计

Hadoop认证教程:HDFS的健壮性设计

Hadoop认证教程:HDFS的健壮性设计,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数据损坏的时候,可以恢复到过去一个已知的正确时间点

技术沙龙MORE+

标签错误:<!-- #Label# labelId=20160707140604 moduleId=1 classId=12231768634 orderby=2 fields=url,title,u_info attribute= datatypeId=22192428132 recordCount=3 pageSize= <htmlTemplate><dt><img src="/images/index_26${index}.jpg" width="100" height="62" /><a href="$url" title="${title}">${title}</a><span>${api.left(u_info,60)}</span></dt></htmlTemplate> -->
我要参加技术沙龙