作为Hadoop的核心技术之一,HDFS(HadoopDistributed File System,Hadoop分布式文件系统)是分布式计算中数据存储管理的基础。它所具有的高容错高可靠性、高扩展性、高获得性、高吞吐率等特征为海量数据提供了不怕故障的存储。
HDFS是一个主/从(Master/Slave)体系结构。HDFS集群有一个NameNode和一些DataNode。NameNode管理文件系统的元数据,DataNode存储实际的数据。客户端通过同NameNode和DataNode的交互访问文件系统。客户端联系NameNode以获取文件的元数据,而真正的文件I/O操作是直接和DataNode进行交互的。
NameNode(主控制服务器)负责管理文件系统的命名空间,记录文件数据块在每个DataNode上的位置和副本信息,协调客户端对文件的访问,以及记录命名空间内的改动或命名空间本身属性的改动。DataNode负责它们所在的物理节点上的存储管理。HDFS开放文件系统的命名空间以便让用户以文件的形式存储数据。HDFS的数据都是“一次写入,多次读取”,典型的块大小64M。HDFS的文件通常是按照64M被切分成不同数据块,每个数据块尽可能地分散存储于不同的DataNode中。NameNode执行文件系统的命名空间操作,比如打开、关闭、重命名文件或目录,还决定数据块到DataNode的映射。DataNode负责处理客户的读写请求,依照NameNode的命令,执行数据块的创建、复制、删除等工作。例如客户端要访问一个文件,首先,客户端从NameNode中获得组成该文件的数据块位置列表,即知道数据块被存储在哪些DataNode上,然后,客户端直接从DataNode上读取文件数据。此过程中,NameNode不参与文件的传输。
HDFS典型的部署是在一个专门的机器上运行NameNode,集群中的其他机器个运行一个DataNode;也可以在运行NameNode的机器上同时运行DataNode,或者一台机器上运行多个DataNode。一个集群只有一个NameNode的设计大大简化了系统的架构。
保证HDFS可靠性措施:
HDFS的主要设计目标之一就是在故障情况下也能保证数据存储的可靠性。HDFS具备了较为完善的冗余备份和故障恢复机制,可以实现在集群中可靠海量的存储海量文件。
保障可靠性措施:
1)冗余备份
HDFS将每个文件存储成一系列数据块,默认大小为64MB。为了容错,文件的所有数据库都会有副本(副本数量即复制因子)。
2)副本存放
HDFS集群一般运行在多个机架上,不同机架上机器的通信需要通过交换机。通常情况下,副本的存放策略很关键,机架内节点之间的带宽比跨机架感知节点之间的带宽要打,它能够影响HDFS的可靠性和性能。HDFS采用机架感知的策略来改进数据的可靠性,可用性和网络带宽的利用率。通过机架感知,NameNode可以确定每个DataNode所属的机架ID。一般情况下,当复制因子是3的时候,HDFS的部署策略是将一个副本放在同一个机架上的另一个节点,一个副本存放在本地机架上的节点,最后一个副本放在不同机架上的节点。机架的错误远比节点的少,这个策略可以防止整个机架失效时数据丢失。
3)心跳检测,每个DataNode定期接受心跳包和块报告,收到心跳包说明该DataNode工作正常
4)安全模式,在系统启动时会进入一个安全模式,此时不会出现数据块的写操作
5)数据完整性检测,在HDFS文件创建时,计算每个数据块和校验和,并将校验和作为一个单独的隐藏文件保存在命名空间下。客户端获取文件时会做对应的校验检查,如果不同则客户端认为数据块有损坏,将从其它的DataNode获取数据块的副本
6)空间回收,当文件被删除时,会先被移到/trash目录里,只要还在这个目录里就可以很快恢复,目录的清空时间是可配置的
7)元数据磁盘失效,映像文件和事务日志是HDFS的核心数据结构
8)快照,快照支持某个时间的数据复制,当HDFS数据损坏时,可以回滚到过去一个已知正确的时间点。
参考文献:
刘鹏. 实战Hadoop---开启通向云计算的捷径[M]. 北京:电子工业出版社.