第三章 分布式文件系统HDFS
大数据要解决数据存储问题,所以有了分布式文件系统(DFS),但可能不符合当时的一些应用需求,于是谷歌公司开发了GFS(Google file System)。GFS是闭源的,而HDFS是对GFS的开源实现。
1.GFS和DFS有什么区别?
GFS(Google File System)和DFS(Distributed File System)都是分布式文件系统,但是它们有以下几个不同点:
1.设计目标不同:GFS是为了在大规模集群中处理大型文件而设计的,而DFS更侧重于在多个计算机之间共享和存储文件。
2.数据复制策略不同:GFS使用了一种称为“三副本策略”的数据复制策略,即将数据分成多个块,每个块都会被复制三次,并存储在不同的计算机上以提高可靠性。DFS使用了“副本策略”将文件分割成固定大小的块,每个块都有多个副本存储在不同的计算机上。
3.处理方式不同:GFS采用主从模式,其中有一个主节点负责协调所有数据读写操作,而DFS采用对等模式,即每个节点都可以进行读写操作。
4.应用场景不同:GFS适用于需要存储大型文件的应用程序,例如基于Web的应用程序或科学计算,而DFS更适合需要在多个计算机之间共享和访问文件的应用程序,例如云存储和日志收集等。
疑问:
2.GFS和HDFS区别是什么?
GFS(Google File System)和HDFS(Hadoop Distributed File System)都是分布式文件系统,但是它们有以下几个不同点:
1.设计目标不同:GFS是为了在大规模集群中处理大型文件而设计的,而HDFS是为了在分布式计算环境中存储和处理海量数据而设计的。
2.数据块大小不同:GFS将文件划分成固定大小的数据块(通常为64MB),而HDFS默认将文件划分成128MB大小的数据块,但可以通过配置进行调整。
3.元数据管理不同:GFS使用单独的主服务器来管理文件系统的元数据,而HDFS使用一个分布式的元数据管理器来协调不同计算节点之间的元数据信息。
4.处理方式不同:GFS采用主从模式,其中有一个主节点负责协调所有数据读写操作,而HDFS采用主从架构,其中有一个主节点(NameNode)负责协调客户端访问文件的元数据,另外还有多个数据节点(DataNode)用于存储实际的数据块。
5.副本策略不同:GFS使用了一种称为“三副本策略”的数据复制策略,即将数据分成多个块,每个块都会被复制三次,并存储在不同的计算机上以提高可靠性。HDFS默认采用“三副本策略”,但可以通过配置进行调整。
6.应用场景不同:GFS适用于需要存储大型文件的应用程序,例如基于Web的应用程序或科学计算,而HDFS更适合用于大数据处理和分析,例如日志处理、数据仓库和机器学习等。
3.为什么说HDFS是GFS的开源实现?
HDFS(Hadoop Distributed File System)被认为是GFS(Google File System)的开源实现,因为它基于GFS的设计思想和架构,在很多方面都与GFS非常相似,如数据划分、数据副本、元数据管理、主从架构等。
HDFS最初是由Apache Hadoop项目开发的,它旨在为Hadoop分布式计算平台提供高性能和可靠的数据存储服务。在设计HDFS时,Hadoop团队借鉴了GFS的思想,并在此基础上做出了一些改进和优化。因此,虽然HDFS并非直接从GFS衍生而来,但在很多方面与GFS非常相似,并且也被认为是一种开源实现的GFS。
尽管HDFS与GFS在一些方面存在差异,但其基于GFS的设计思想和架构,因此HDFS也是一种高性能、可靠、可扩展的分布式文件系统,广泛应用于大数据处理和分析领域。
3.1 分布式文件系统
分布式文件系统(Distributed File System,DFS)是一种计算机网络中的文件系统,它通过将文件存储在多个计算机节点上,以实现数据的可靠存储和高效访问。DFS通过将文件划分为多个数据块并在不同计算机节点上进行存储和复制,从而提高了数据的可靠性和可用性。
3.1.1 计算机集群结构
计算机集群是由多个计算机节点组成的计算系统,每个节点都可以独立地执行任务,并通过网络进行通信和协作。
所谓分布式文件系统就是把一个文件分成多块存在不同的电脑上面。这些电脑放一堆就成了一个计算机集群,不过这些电脑不是人用的,当然不需要显示器什么的外设,只由普通硬件构成,降低成本。

集群中的计算机节点存放在机架( Rack)上,每个架可以存放 8~64个节点,同一机架上的不同节点之间通过网络互连( 常采用吉比特以太网),多个不同机架之间采用另一级网络或交换机互连。(每个节点可视作一台计算机)
3.1.2 分布式文件系统的结构
块
Windows、Linux 等操作系统中,文件系统一般会把磁盘空间划分为每512Byte组,称为“磁盘块”,它是文件系统进行读写操作的最小单位,文件系统的块 (Block) 通常是碰盘块的整数倍,即每次读写的数据量必须是磁盘块大小的整数倍。
分布式文件系统也采用了块的概念, HDFS默认的一个块的大小是 64 MB。与普通文件不同的是,在分布式文件系统中,如果一个文件小于个数据块的大小,它并不占用整个数据块的存储空间。
节点
分布式文件系统在物理结构上是由计算机集群中的多个节点构成的
这些节点分为两类:一类叫“主节点”(Master Node),或者被称为“名称节点”(NameNode ); 另一类叫“从节点”(Slave Node),或者被称为“数据节点”( DataNode )。
名称节点:名称节点负责文件和目录的创建、删除和重命名等,同时管理着数据节点和文件块的映射关系,因此客户端只有访问名称节点才能找到请求的文件块所在的位置,进而到相应位置读取所需文件块。
数据节点:数据节点负责数据的存储和读取,在存储时,由名称节点分配存储位置,然后由客户端把数据直接写入相应数据节点;
在读取时,客户端从名称节点获得数据节点和文件块的映射关系,然后就可以到相应位置访问文件块。数据节点也要根据名称节点的命令创建、删除和复制数据块。

容错:
计算机集群中的节点可能发生故障,因此为了保证数据的完整性,分布式文件系统通常采用多副本存储。
文件块会被复制为多个副本,存储在不同的节点上,而且存储同一文件块的不同副本的各个节点会分布在不同的机架上。
这样,在单个节点出现故障时,就可以快速调用副本重启单个节点上的计算过程,而不用重启整个计算过程,整个机架出现故障时也不会丢失所有文件块,
注意:
文件块的大小和副本个数通常可以由用户指定。
分布式文件系统是针对大规模数据存储而设计的,主要用于处理大规模文件,如 TB 级文件处理规模过小的文件不仅无法充分发挥其优势,而且会严重影响系统的扩展和性能。
3.1.3 分布式文件系统的设计需求
分布式文件系统的设计需求主要包括透明性、并发控制、文件复制、硬件和操作系统的异松性、可伸缩性、容错以及安全需求等。但是,在具体实现中,不同产品实现的级别和方式都有不同。
设计需求 |
含义 |
HDFS的实现情况 |
透明性 |
具备访问透明性、位置透明性、性能和伸缩透明性。
|
只能提供一定程度的访问透明性,完全支持位置透明性、性能和伸缩明性 |
并发控制 |
|
机制非常简单,任何时间都只允许有一个程序写人某个文件 |
文件复制 |
一个文件可以拥有在不同位置的多个副本 |
HDFS 采用了多副本机制 |
硬件和操作系统的异构性 |
可以在不同的操作系统和计算机上实现同样的客户端和服务器端程序 |
采用 Java 语言开发,具有很好的跨平台能力 |
可伸缩性 |
支持节点的动态加人或退出 |
建立在大规模廉价机器上的分布式文件系统集群,具有很好的可伸缩性 |