分布式文件系统
相对于传统的本地文件系统,分布式文件系统(Distributed File System)是一种通过网络实现文件在多台主机上记性分布式存储的文件系统。分布式文件系统的设计一般采用 “客户端/服务器” 模式。
目前,应用广泛的分布式文件系统主要包括 GFS 和 HDFS,后者是前者的开源实现。
3.1.1 计算机集群结构
普通的文件系统只需要单个计算机节点就可以完成文件的存储和处理,单个计算机节点由处理器、内存、高速缓存和本地磁盘构成。
分布式文件系统把文件分布存储到多个计算机节点上,成千上万的计算机节点构成 计算机集群。目前的分布式文件系统所采用的的计算机集群都是由普通硬件构成的,大大降低了硬件上的开销。
计算机洁群的基本架构如图所示:
3.1.2 分布式文件系统的结构
在我们熟悉的 Windows、Linux 等操作系统中,文件系统一般会把磁盘空间划分为每 512 字节位一组,称为“磁盘块”,它是文件系统读写操作的最小单元,文件系统的块(Block)通常是磁盘块的整数倍,即每次读写的数据量必须是磁盘块大小的整数倍。
分布式文件系统也采用了块的概念,文件被分成若干个块进行存储,块是数据读写的基本单元。HDFS 默认的一个块的大小是 64 MB。在分布式文件系统中,如果一个文件小于一个数据块的大小,它并不占用整个数据块的存储空间。
分布式文件系统在物理结构上是由计算机集群中的多个节点构成的。这写节点分为两类:一类叫 “主节点”(Master Node),或者也被称为 “名称节点(NameNode)”;另外一类叫 “从节点(Slave Node)”,或者也被称为 “数据结点(DataNode)”。
名称节点:负责文件和目录的创建、删除和重命名等,同时管理着整个数据节点和文件块的映射关系,因此客户端只有访问名称节点才能找到请求的文件块所在的位置,进而到相应位置读取所需文件块
数据节点:负责数据的存储和读取,在存储时,由名称节点分配存储位置,然后由客户端把数据直接写入相应数据节点;在读取时,客户端从名称节点获取数据节点和文件块的映射关系,然后就可以找到相应位置访问文件块。数据节点也要根据名称节点的命令创建、删除数据块和冗余复制。
计算机集群中的节点可能发生故障,因此未来保证数据的完整性,分布式文件系统通常采用 多副本存储。文件块会被复制为多个副本,存储在不同的节点上,而且存储同一文件块的不同副本的各个节点会分布在不同的机架上。
3.1.3 分布式文件系统的设计需求
分布式文件系统的设计需求: