我在一个项目上运行 Hadoop 并且需要一个建议。
通常,默认情况下,Hadoop 的“块大小”约为 64mb。
还有建议不要使用太多/小文件。
由于 flume 的应用程序设计,我目前将非常非常小的文件放入 HDFS。
问题是,Hadoop <= 0.20 无法附加到文件,因此我的 map-reduce 有太多文件无法有效运行。
一定有一个正确的方法可以将大约 100 个文件简单地合并为一个。
因此,Hadoop 实际上是在读取 1 个大文件,而不是 10 个
有什么建议么??
答案1
Media6degrees 提出了一个非常好的解决方案来合并 Hadoop 中的小文件。您可以直接使用他们的 jar。 http://www.jointhegrid.com/hadoop_filecrush/index.jsp
答案2
您是否考虑过使用 Hadoop 存档?可以将它们视为 HDFS 的 tar 文件。 http://hadoop.apache.org/common/docs/r0.20.2/hadoop_archives.html
答案3
您需要做的是编写一个简单的连接程序,其中包含一个身份映射器和一个或几个身份缩减器。此程序将允许您将小文件连接成几个大文件,以减轻 Hadoop 的负载。
这可能是一项非常繁重的任务,而且会浪费空间,但由于 HDFS 的设计,这是必要的。如果 HDFS 是一流的文件系统,那么处理起来就会容易得多。