Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统。它和现有的分布式文件系统有很多共同点。但同时,它和其他的分布式文件系统的区别也是很明显的。HDFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的。HDFS在最开始是作为Apache Nutch搜索引擎项目的基础架构而开发的。HDFS是Apache Hadoop Core项目的一部分。HDFS有着高容错性(fault-tolerant)的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求(requirements)这样可以实现流的形式访问(streaming access)文件系统中的数据。
Hadoop Distributed File System,简称HDFS[1],是一个分布式文件系统。HDFS有着高容错性(fault-tolerant)的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求(requirements)这样可以实现流的形式访问(streaming access)文件系统中的数据。HDFS开始是为开源的apache项目nutch的基础结构而创建,HDFS是hadoop项目的一部分,而hadoop又是lucene的一部分。
硬件故障
硬件故障是常态,而不是异常。整个HDFS系统将由数百或数千个存储着文件数据片断的服务器组成。实际上它里面有非常巨大的组成部分,每一个组成部分都很可能出现故障,这就意味着HDFS里的一些组成部分是总是失效的,因此,故障的检测和自动快速恢复是HDFS一个很核心的设计目标。
流式的数据访问
运行在HDFS之上的应用程序必须流式地访问它们的数据集,它不是运行在普通文件系统之上的普通程序。HDFS被设计成适合批量处理的,而不是用户交互式的。重点是在数据吞吐量,而不是数据访问的反应时间,POSIX的很多硬性需求对于HDFS应用都是非必须的,去掉POSIX一小部分关键语义可以获得更好的数据吞吐率。
运行在HDFS之上的程序有很大量的数据集。典型的HDFS文件大小是GB到TB的级别。所以,HDFS被调整成支持大文件。它应该提供很高的聚合数据带宽,一个集群中支持数百个节点,一个集群中还应该支持千万级别的文件。
简单一致性模型
大部分的HDFS程序对文件操作需要的是一次写多次读取的操作模式。一个文件一旦创建、写入、关闭之后就不需要修改了。这个假定简单化了数据一致的问题和并使高吞吐量的数据访问变得可能。一个Map-Reduce程序或者网络爬虫程序都可以完美地适合这个模型。
移动计算比移动数据更经济
在靠近计算数据所存储的位置来进行计算是最理想的状态,尤其是在数据集特别巨大的时候。这样消除了网络的拥堵,提高了系统的整体吞吐量。一个假定就是迁移计算到离数据更近的位置比将数据移动到程序运行更近的位置要更好。HDFS提供了接口,来让程序将自己移动到离数据存储更近的位置。
异构软硬件平台间的可移植性
HDFS被设计成可以简便地实现平台间的迁移,这将推动需要大数据集的应用更广泛地采用HDFS作为平台。
HDFS是一个的主从结构,一个HDFS集群是由一个名字节点,它是一个管理文件命名空间和调节客户端访问文件的主服务器,当然还有一些数据节点,通常是一个节点一个机器,它来管理对应节点的存储。HDFS对外开放文件命名空间并允许用户数据以文件形式存储。
内部机制是将一个文件分割成一个或多个块,这些块被存储在一组数据节点中。名字节点用来操作文件命名空间的文件或目录操作,如打开,关闭,重命名等等。它同时确定块与数据节点的映射。数据节点来负责来自文件系统客户的读写请求。数据节点同时还要执行块的创建,删除,和来自名字节点的块复制指令。
HDFS(Hadoop Distributed File System)是Hadoop项目的核心子项目,是分布式计算中数据存储管理的基础,坦白说HDFS是一个不错的分布式文件系统,它有很多的优点,但也存在有一些缺点,包括:不适合低延迟数据访问、无法高效存储大量小文件、不支持多用户写入及任意修改文件。
Apache软件基金会成立的时候,HDFS就一直在想办法提高它的性能和可用性,坦白说,这也许对试点项目、非常规项目、要求不严格的大环境中比较适用,但是对于某些Hadoop用户来说,他们对于性能、可用性、企业级特性有较高的要求,且注重直接附加存储(DAS)架构,特别是老版本的Hadoop没有高性能的主节点,那么接下来8个产品就是代替HDFS的绝佳方案。
1. Cassandra (DataStax)
并非一个完全的文件系统,而是一个开源、NoSQL 键值(key-value)商店。这给依靠快速数据访问的Web 应用多了一个HDFS选择。简单来说它把Hadoop融合在Cassandra里面,支持Web应用通过Hadoop快速访问数据, 而Hadoop可以快速访问流入Cassandra的数据。
2. Ceph
Ceph 是一个开源、多管齐下的操作系统,因为其高性能并行文件系统的特性,有人甚至认为它是基于Hadoop环境下的HDFS的接班人,因为自2010年就有研究者在寻找这个特性。
3. Cleversafe:分散存储网络
本周一Cleversafe宣布将融合Hadoop的并行编程技术和自己的分散存贮网络。其原理是通过把整个元数据分布在集群中(不是依靠单个主节点、不是依靠复制),Cleversafe表示这比HDFS更快、更稳定、更具扩展性。
4. GPFS (IBM)
IBM一直在向高性能要求的用户销售其并行文件系统,包括世界上最快的超级电脑,2010年它推出了基于Hadoop的GPFS, 并宣布GPFS不共享集群版本比Hadoop快多了,因为
它在内核级别中运行,而不是在操作系统中运行例如HDFS。
5. Isilon (EMC)
EMC提供Hadoop发行版已经一年了,但2012年1月转型为HDFS企业级别的新方案——Isilon 的 OneFS文件系统。因为Isilon可以读取 NFS, CIFS以及 HDFS 协议, 一个单独的 Isilon NAS系统可以摄入、处理、分析数据。
6. Lustre
HPC存储提供商Xyratex 增在2011年的一份报道中写到, 基于Lustre的集群会比基于HDFS的集群更快更便宜。
7. MapR 文件系统
MapR 文件系统在业内已经具有一定知名度了,不仅MapR宣布它自己的文件系统比HDFS快2-5倍(实际上有20倍),它还具有镜像、快照、高性能这些企业用户喜欢的特点。
8. NetApp Hadoop开放方案
NetApp重新改版了物理Hadoop结构:把HDFS放在磁盘阵列中,通过这样来达到更快、更稳定、更安全的Hadoop工作。