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