单台服务器作为Namenode,当文件数量规模不断增大时,元数据的规模增长将是一个需要面对的问题,由于Namenode需要将所有元数据Load到内存中,单台Namenode可能会无法管理海量的元数据。另一个是HDFS中SequenceFile存储方式的讨论,利用Block压缩方式可以很好的解决空间压力。
HDFS中文件是按Block来存储的,默认一个Block的长度是128MB,当HDFS中存在大量小文件(长度小于128MB)时,
不仅占用大量存储空间,而且也占用大量的Namespace,给Namenode带来了内存压力.
Yahoo内部有一个生产集群,统计下来有57,000,000个小于128MB的文件,这些小文件消耗了95%的namespace,
占用了30%的存储空间。Namenode的压力一般也常常是因为有海量的小文件存在,如果没有这些小文件存在的话,
Namenode内存还没撑爆,估计存储空间就先爆了.
Hadoop Archive: File Compaction for HDFS提到了解决方法,是利用Hadoop Archive(HAR),这个特性从Hadoop 0.18.0版本就已经引入了,他可以将众多小文件打包成一个大文件进行存储,并且打包后原来的文件仍然可以通过Map-reduce进行操作,打包后的文件由索引和存储两大部分组成,索引部分记录了原有的目录结构和文件状态。