当数据集的大小超过一台独立物理计算机的存储能力时,就有必要对它进行分区并且存储到若干台单独的计算机上。管理网络中跨多台计算机存储的文件系统被称为分布式文件系统(distributed filesystem).
分布式文件系统架构于网络智商,势必会引入网络编程的复杂性,因此分布式文件系统比普通磁盘文件系统更加复杂,比如文件系统能够容忍节点故障但是不丢失数据就是一个很大的挑战。
HDFS的全称是Hadoop Distributed Filesystem,在非正式文档或者旧文档以及配置文件中,有时也简称为DFS。实际上Hadoop是一个综合性的文件系统抽象,Hadoop也可以集成其他文件系统。
Hadoop的适用场景:
(1)超大文件----------这里指的是具有几百MB、几百GB、几百TB大小的文件。目前已经有存储PB级数据的Hadoop集群了。
(2)流式数据访问-----HDFS的思路是:一次写入、多次读取是最高效的访问模式。数据集通常由数据源生成或者从数据源复制而来,记者长时间在此数据集上进行各类分析。每次分析都将涉及该数据集的大部分数据甚至全部,因此读取整个数据集的时间延迟比读取第一条记录的时间延迟更重要。
(3)商用硬件------Hadoop并不需要运行在昂贵并且高可靠的硬件上,它是设计运行在商用硬件(大多数零售店都可以买得到的普通硬件)的集群上的,因此对于庞大的集群来说,节点故障的几率很高。HDFS遇到上述故障时,可以继续运行而且不让用户察觉到明显的中断。
Hadoop不适用的场景:
(1)低时间延迟的数据访问-----要求低时间延迟数据访问的而应用,比如几十毫秒的范围,不适合在HDFS上运行。需要记住的是,HDFS是为了搞数据吞吐量应用优化的额,这可能会以高时间延迟为代价。对于低延时的访问需求,HBase是更好的选择。
(2)大量的小文件-------由于namenode将文件系统的元数据存储在内存中,因此该文件系统所能存储的文件总数受限于namenode的内存容量。根据经验,每个文件、目录和数据块的存储信息大约占150字节。
(3)多用户写入,任意修改文件----由于HDFS中的文件可能只有一个writer,而且写操作总是将数据添加到文件的末尾。它不支持具有多个写入者的操作,也不支持在文件的任意位置进行修改。可能之后会支持这些操作,但是它们相对比较低效。
原文地址:http://blog.csdn.net/xinguimeng/article/details/44001639