首页 > 代码库 > 一些流行的分布式文件系统(Hadoop、Lustre、MogileFS、FreeNAS、FastDFS、GoogleFS)

一些流行的分布式文件系统(Hadoop、Lustre、MogileFS、FreeNAS、FastDFS、GoogleFS)


1、故事的起源

时间过的很快,距离上一次项目的大规模升级和调整虽然已经过去了几年,但是总感觉就发生在昨天,但是系统已经再次需要进行扩展。数据规模的扩大化,运行条件的复杂化,运维保障体系的升级化,原来有不少内容都需要调整,使用一种合适的分布式文件系统已经进入我们的视野。

在网上找了一些资料,也请了一些业内的专家座谈和调研,我们最终选择的是分布式文件系统是Hadoop,顺便也把一些其他的调研的系统也记录下,将来要使用也可以作为一个参考。

当前比较流行的分布式文件系统包括:HadoopLustreMogileFSFreeNASFastDFSGoogleFS。部分内容来自网络,随时间的推移,一些功能可能有变化,请注意!

2Hadoophadoop.apache.com

Hadoop是一个由Apache基金会所开发的分布式系统基础架构。

用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

Hadoop实现了一个分布式文件系统(Hadoop DistributedFile System),简称HDFSHDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relaxPOSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。

Hadoop的框架最核心的设计就是:HDFSMapReduceHDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。

优点

高可靠性。Hadoop按位存储和处理数据的能力值得人们信赖。

高扩展性。Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中。

高效性。Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快。

高容错性。Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配。

低成本。与一体机、商用数据仓库以及QlikViewYonghong Z-Suite等数据集市相比,hadoop是开源的,项目的软件成本因此会大大降低。

Hadoop带有用Java语言编写的框架,因此运行在 Linux生产平台上是非常理想的。Hadoop上的应用程序也可以使用其他语言编写,比如 C++

Hadoop是目前最流行的的分布式文件系统之一,能找到的资料相当丰富。

 

3Lustrewww.lustre.org

       Lustre,一种平行分布式文件系统,通常用于大型计算机集群和超级电脑。Lustre是源自LinuxCluster的混成词。最早在1999年,由皮特·布拉姆(英语:Peter Braam)创建的集群文件系统公司(英语:Cluster File SystemsInc.)开始研发,于2003年发布 Lustre 1.0。采用GNU GPLv2开源码授权。

Lustre文件系统包括三种主要的功能单元:

元数据服务器(metadata serversMDSes)。一个Lustre文件系统通常拥有两个元数据服务器(activestandby),一个元数据服务器则拥有若干元数据目标(metadata targetsMDTs)。元数据目标存储名字空间元数据:文件名、目录、访问权限、文件结构等信息。不同于诸如GPFSPanFS等基于块并由元数据服务器控制所有块分配的分布式文件系统,Lustre元数据服务器仅仅关心路径搜索和权限检查而不会牵涉任何的文件I/O操作。该特性避免元数据服务器成为集群扩展的瓶颈。单个文件系统拥有多个元数据目标是从2.4开始引入的新特性。

对象存储服务器(object storageserversOSSes)将文件数据存储于一个或多个对象存储目标(object storage targetsOSTs)中。取决于服务器硬件,一个对象存储服务器通常有二到八个对象存储目标,每个对象存储目标管理一个本地文件系统。Lustre文件系统的空间等于所有对象存储目标的容量总和。

客户机(Clients)能访问并使用数据。Lustre为所有客户机提供统一的命名空间。

MDTOSTClient可以位于同一节点(通常用于测试),但在典型的生产环境中这些功能组件安装在使用网络进行通信的不同节点。 Lustre NetworkLNET)层可以使用多种类型的网络互连,包括InfiniBand、以太网等。如果远程直接内存访问(RDMA)传输可用,Lustre将利用它提高吞吐量降低CPU使用率。 

 

运行在linux,开发语言c/c++,感觉很找到的资料不是很多。

4MogileFswww.danga.com

MogileFS 是一个开源的分布式文件系统,用于组建分布式文件集群,由danga团队开发,该团队同时也是memcached的开发者。MogileFS的存储引擎对应用完全透明,同时它的每一个节点还可以作为轻量级Http Server,支持GET直接访问文件。另外,还包括接入时负载均衡的支持。

主要特征包括

1、应用层的组件

2、无单点故障

3、自动文件复制

4、具有比RAID更好的可靠性

5、无需RAID nigukefs支持,运行在linux下。

 

5FreeNASwww.openqrm.org

FreeNAS是一套免费的NAS服务器,它能将一部普通PC变成网络存储服务器。该软件基于FreeBSDSambaPHP,支持CIFS (samba), FTP, NFSprotocols, Software RAID (0,1,5) web界面的设定工具。用户可通过WindowsMacsFTPSSH及网络文件系统 (NFS)来访问存储服务器;FreeNAS可被安装于硬盘或移动介质USB Flash Disk上,所占空间不足 16MBFreeNAS服务器前途无量;它的开发工作十分活跃。单是2006年前4个月就释出11个修正版本。它是组建简单网络存储服务器的绝佳选择,免去安装整套Linux FreeBSD 的烦恼。而且FreddNAS还有监控网络情况的作用,

重要的一点Freenas 8版本不支持系统文件与存储共同使用同一块硬盘,系统文件单独使用一个设备,该设备可以是USB内存卡、U盘、单独的一块硬盘等,存储使用另一磁盘设备

 

6FastDFScode.google.com/p/fastdfs

FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。

FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)。跟踪器主要做调度工作,在访问上起负载均衡的作用。

存储节点存储文件,完成文件管理的所有功能:存储、同步和提供存取接口,FastDFS同时对文件的metadata进行管理。所谓文件的meta data就是文件的相关属性,以键值对(key valuepair)方式表示,如:width=1024,其中的keywidthvalue1024。文件metadata是文件属性列表,可以包含多个键值对。

跟踪器和存储节点都可以由一台或多台服务器构成。跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线上服务。其中跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或减少。

为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起到了冗余备份和负载均衡的作用。

在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。

当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。  开发语言c/c++,运行在linux系统下。

7googleFs

GFS(googleFs)是一个可扩展的分布式文件系统,用于大型的、分布式的、对大量数据进行访问的应用。它运行于廉价的普通硬件上,但可以提供容错功能。它可以给大量的用户提供总体性能较高的服务。

GFS与过去的分布式文件系统有很多相同的目标,但GFS的设计受到了当前及预期的应用方面的工作量及技术环境的驱动,这反映了它与早期的文件系统明显不同的设想。这就需要对传统的选择进行重新检验并进行完全不同的设计观点的探索。

GFS与以往的文件系统的不同的观点如下:

部件错误不再被当作异常,而是将其作为常见的情况加以处理。因为文件系统由成百上千个用于存储的机器构成,而这些机器是由廉价的普通部件组成并被大量的客户机访问。部件的数量和质量使得一些机器随时都有可能无法工作并且有一部分还可能无法恢复。所以实时地监控、错误检测、容错、自动恢复对系统来说必不可少。

⒉按照传统的标准,文件都非常大。长度达几个GB的文件是很平常的。每个文件通常包含很多应用对象。当经常要处理快速增长的、包含数以万计的对象、长度达TB的数据集时,我们很难管理成千上万的KB规模的文件块,即使底层文件系统提供支持。因此,设计中操作的参数、块的大小必须要重新考虑。对大型的文件的管理一定要能做到高效,对小型的文件也必须支持,但不必优化。

⒊大部分文件的更新是通过添加新数据完成的,而不是改变已存在的数据。在一个文件中随机的操作在实践中几乎不存在。一旦写完,文件就只可读,很多数据都有这些特性。一些数据可能组成一个大仓库以供数据分析程序扫描。有些是运行中的程序连续产生的数据流。有些是档案性质的数据,有些是在某个机器上产生、在另外一个机器上处理的中间数据。由于这些对大型文件的访问方式,添加操作成为性能优化和原子性保证的焦点。而在客户机中缓存数据块则失去了吸引力。

⒋工作量主要由两种读操作构成:对大量数据的流方式的读操作和对少量数据的随机方式的读操作。在前一种读操作中,可能要读几百KB,通常达 1MB和更多。来自同一个客户的连续操作通常会读文件的一个连续的区域。随机的读操作通常在一个随机的偏移处读几个KB。性能敏感的应用程序通常将对少量数据的读操作进行分类并进行批处理以使得读操作稳定地向前推进,而不要让它来反反复复地读。

⒌工作量还包含许多对大量数据进行的、连续的、向文件添加数据的写操作。所写的数据的规模和读相似。一旦写完,文件很少改动。在随机位置对少量数据的写操作也支持,但不必非常高效。

⒍系统必须高效地实现定义完好的大量客户同时向同一个文件的添加操作的语义。

7.高可持续带宽比低延迟更重要

一些流行的分布式文件系统(Hadoop、Lustre、MogileFS、FreeNAS、FastDFS、GoogleFS)