我是 hadoop 新手,我正在处理 wordcount 示例中的大量小文件。它需要大量的地图任务并导致我的执行速度变慢。
如何减少地图任务的数量?
如果我的问题的最佳解决方案是将小文件转换为更大的文件,我该如何对它们进行分类?
我是 hadoop 新手,我正在处理 wordcount 示例中的大量小文件。它需要大量的地图任务并导致我的执行速度变慢。
如何减少地图任务的数量?
如果我的问题的最佳解决方案是将小文件转换为更大的文件,我该如何对它们进行分类?
如果您使用类似TextInputFormat
的东西,问题是每个文件至少有 1 个拆分,因此地图数量的上限是文件的数量,在您有很多非常小的文件的情况下,您最终会得到许多映射器处理每个非常少的数据。
为了解决这个问题,您应该使用CombineFileInputFormat
which 将多个文件打包到同一个拆分中(我认为达到块大小限制),因此使用这种格式,映射器的数量将独立于文件的数量,它只取决于数据量。
您必须通过扩展来创建自己的输入格式,您可以在此处CombineFileInputFormt
找到实现。一旦你定义好了,让我们像在链接中那样调用它,你可以告诉你的工作使用它:InputFormat
CombinedInputFormat
job.setInputFormatClass(CombinedInputFormat.class);
Cloudera 在某个时候发布了一篇关于小文件问题的博客。这是一个旧条目,但建议的方法仍然适用。