Hadoop并不擅长对小型文件的储存,原因取决于Hadoop文件系统的文件管理机制,Hadoop的文件存储的单元为一个块(block),block的数据存放在集群中的datanode节点上,由namenode对所有datanode存储的block进行管理。namenode将所有block的元数据存放在内存中,以方便快速的响应客户端的请求。那么问题来了,不管一个文件有多小,Hadoop都把它视为一个block,大量的小文件,将会把namenode的内存耗尽。
那么如何对大量的小文件进行有效的处理呢?Hadoop的优秀工程师们其实已经为我们考虑好了,Hadoop提供了一个叫Archive归档工具,Archive可以把多个文件归档成为一个文件,换个角度来看,Archive实现了文件的元数据整理,但是,归档的文件大小其实没有变化,只是压缩了文件的元数据大小。
Archive的用法:
1、看一下,目录结构: hadoop fs -ls -R
2、归档gs目录:hadoop archive -archiveName gs.har -p /user/c