我是hadoop的新手,我正在使用wordcount示例中的大量小文件。 它需要大量的地图任务,导致我的执行速度变慢。
我怎样才能减少地图任务的数量?
如果我的问题的最佳解决方案是将小文件捕获到更大的文件,我该如何捕捉它们?
答案 0 :(得分:7)
如果您使用TextInputFormat
之类的问题,问题是每个文件至少有1个分割,因此地图数量的上限是文件数量,在您拥有的情况下许多非常小的文件最终会有许多映射器处理每个非常少的数据。
为了解决这个问题,您应该使用CombineFileInputFormat
将多个文件打包到同一个分区中(我想到了块大小限制),因此使用该格式,映射器的数量将与数量无关文件,它只取决于数据量。
您必须从CombineFileInputFormt
扩展来创建自己的输入格式,您可以找到实施here。在您InputFormat
定义后,让我们在链接CombinedInputFormat
中调用它,您可以通过执行以下操作告诉您的工作:
job.setInputFormatClass(CombinedInputFormat.class);
答案 1 :(得分:3)
Cloudera有时会在小文件问题上发布blog。这是一个旧条目,但建议的方法仍然适用。