HDFS的设计
我们从以下角度分析:
-
超大文件
HDFS可以并适合存储
超大文件
。这里只具有几百MB、几百GB、甚至几百TB大小的文件。目前已经有存储PB级数据的Hadoop集群了。 -
流式数据访问
HDFS的设计理念:一次写入、多次读取是最高效的访问方式。数据集写入后,每次分析都将涉及该数据集的大部分甚至全部,因此在HDFS的设计中读取整个数据集的时间延迟比读取第一条记录的时间延迟更重要。
-
商用硬件
HDFS并不需要运行在昂贵且可靠的硬件上。它是设计并运行在普通商用硬件的集群上的。同样也带来了问题,至少对于庞大的集群来说,节点故障的几率还是比较高的。但是HDFS的高可用机制和容错机制,可以让集群继续运行,并且不让用户察觉到明显的中断。
-
低时间延迟的数据访问
对低时间延迟要求较高的应用,不适合在HDFS上运行。HDFS是为高数据吞吐量应用优化的。为了实现这个目的,提高时间延迟也是代价的一部分。对于低延迟的应用HBase应该是不错的选择。
-
大量小文件
由于
namenode
将文件系统的元数据存储在内存中,因此文件系统所能存储的文件总数受限于namenode
的内存大小。如果每个文件的元数据大小为150字节,那么存储一百万个文件,至少要300MB的内存。可想而知,如果有更多文件将会怎样。 -
多用户写入,任意修改文件
HDFS的文件仅支持单个写入者,写操作只能是以在文件末尾
追加
的方式。不支持随机读写。
总结
从以上角度我们大概就能清楚的认识到HDFS的适用场景是怎样的,我们在设计或部署HDFS集群时应该考虑哪些问题。比如:并不是仅仅盲目的增加机器数据量,就能完美扩容的。