小文件问题

来源:互联网 发布:怎么复制淘宝商品链接 编辑:程序博客网 时间:2024/06/16 11:17

5.2    小文件问题

小文件是指文件size小于HDFS上block大小的文件。这样的文件会给hadoop的扩展性和性能带来严重问题。首先,在HDFS中,任何block,文件或者目录在内存中均以对象的形式存储,每个对象约占150byte,如果有1000 0000个小文件,每个文件占用一个block,则namenode需要2G空间(存两份)。如果存储1亿个文件,则namenode需要20G空间。这样namenode内存容量严重制约了集群的扩展。 其次,访问大量小文件速度远远小于访问几个大文件。HDFS最初是为流式访问大文件开发的,如果访问大量小文件,需要不断的从一个datanode跳到另一个datanode,严重影响性能。最后,处理大量小文件速度远远小于处理同等大小的大文件的速度。每一个小文件要占用一个slot,而task启动将耗费大量时间甚至大部分时间都耗费在启动task和释放task上。

对于Hadoop小文件问题,当前主要有两种解决方案,(1)设计一种工具(比如mapreduce作业)交给用户,让用户自己每隔一段时间将小文件打包成大文件,当前Hadoop本身提供了几个这样的工具,包括Hadoop Archive(Hadoop提供了shell命令),Sequence file(需自己写程序实现)和CombineFileInputFormat(需自己写程序实现)。(2)从系统层面解决HDFS小文件,论文[10][11]介绍了它们思路,大体上说思路基本一致:在原有HDFS基础上添加一个小文件处理模块,当用户上传一个文件时,判断该文件是否属于小文件,如果是,则交给小文件处理模块处理,否则,交给通用文件处理模块处理。小文件处理模块的设计思想是,先将很多小文件合并成一个大文件,然后为这些小文件建立索引,以便进行快速存取和访问。

0 0