Hadoop滚动小文件

我在一个项目上运行Hadoop,需要一个build议。

通常默认情况下,Hadoop的“块大小”大约为64mb ..
还有一个build议,不要使用很多/小文件..

由于flume的应用程序devise,目前我正在将非常非常小的文件放入HDFS中。

问题是,Hadoop <= 0.20不能追加到文件,从而我有太多的文件,我的地图 – 减less有效地运作..

必须有一个正确的方法,简单地滚动/合并大约100个文件到一个..
因此,Hadoop正在有效地读取1个大文件而不是10个文件

有什么build议么??

Media6degrees已经提出了一个很好的解决scheme,将Hadoop中的小文件合并在一起。 你可以直接使用他们的jar子。 http://www.jointhegrid.com/hadoop_filecrush/index.jsp

你有没有考虑过使用Hadoop存档? 把它们想象成HDFS的tar文件。 http://hadoop.apache.org/common/docs/r0.20.2/hadoop_archives.html

你需要做的是用一个身份映射器和一个或几个身份缩减器写一个简单的连接器程序。 该程序将允许您将小文件连接成几个大文件,以减轻Hadoop的负担。

这可能是一项相当耗时的任务,浪费空间,但由于HDFS的devise,这是必要的。 如果HDFS是一stream的文件系统,那么处理起来就容易多了。