目录
(一)概述
在海量数据的业务场景中,我们每天采集的数据通常是GB级别的,系统所存储的数据通常是TB级别的,甚至是PB级别。为了应为数据存储的管理和扩展问题,大数据集群通常采用横向扩展的方式来满足数据增长的需求,即以网络互连的节点为单位扩大存储容量。为了构建横向扩展的分布式文件系统,通常需要解决如下几个问题:
1.数据能备份:由于横向扩展的集群节点通常采用廉价的服务器,因而出现故障的几率较大,需要分布式文件系统能够很好的应对各种问题,也就是有良好的容错性;
2.存储大文件:在分布式文件系统中,存储GB级别的文件很常见,也可能存储大量的KB级小文件,这与传统文件系统的场景很不同,要求大数据集群在IO方面有良好的性能;
3.一次写入多次读取:大多数场景下,文件是追加写入的,且写入完成后不会随机修改,只会读取。因此,文件的追加操作需要重点保障读写性能和原子操作。
在2003年,Google发布了分布式文件系统GFS的相关论文,在此基础上,Apache开源了顶级项目:Hadoop,而HDFS正是Hadoop中的分布式文件系统,也是GFS的开源实现。
(二)文件系统的应用
构建分布式文件系统,通常有两种方式:文件级别和块级别。
这里首先介绍文件级别,通常采用的方案是基于现有文件系统的主从架构:Master/Slave,也就是给定N个网络节点,每个节点都装有Linux操作系统,选出一个节点作为Master,记录文件的元信息,其他节点作为Slave,存储实际文件。
该方案是初级的分布式文件系统实现,但存在如下两个难以解决的问题:
1.难以负载均衡:文件级别的分布式文件系统,以文件为单位进行存储,由于用户的文件大小不统一,因此难以保证每个节点的数据都是均衡的;
2.难以并行处理:如果以文件为单位进行存储,当多个分布在不同节点上的并行任务读取同一文件时,存储该文件的节点网络带宽便会成为瓶颈,从而制约上层框架的并行处理效率。
文件级别的分布式文件系统结构图如下:
为了解决文件级别的分布式文件系统存在的问题,我们提出了块级别的分布式文件系统,其核心思想是将文件分成等大的数据块,例如HDFS默认是128MB,并以数据块为单位存储到不同的节点上,进而解决负载均衡和并行处理的问题。如下图所示:
(三)HDFS基本架构
HDFS是典型的块级