我如何处理hadoop中的大量小文件?

use*_*364 8 hadoop

我是hadoop的新手,我正在使用wordcount示例中的大量小文件.它需要大量的地图任务并导致我的执行速度变慢.

我怎样才能减少地图任务的数量?

如果我的问题的最佳解决方案是将小文件捕获到更大的文件,我该如何捕捉它们?

Cha*_*guy 7

如果你正在使用类似的东西TextInputFormat,问题是每个文件至少有1个分割,所以地图数量的上限是文件的数量,在你的情况下,你有很多非常小的文件,你最终会许多映射器处理每个非常少的数据.

为了解决这个问题,您应该使用CombineFileInputFormat哪个将多个文件打包到同一个分区中(我认为最多可以达到块大小限制),因此使用该格式,映射器的数量将与文件数量无关,它将依赖于数据量.

你必须通过扩展来创建自己的输入格式CombineFileInputFormt,你可以在这里找到一个实现.一旦你有了你的InputFormat定义,让我们在链接中调用它CombinedInputFormat,你可以告诉你的工作通过这样做来使用它:

job.setInputFormatClass(CombinedInputFormat.class);
Run Code Online (Sandbox Code Playgroud)