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

如何在hadoop中处理大量小文件?,hadoop,Hadoop,我是hadoop新手,我正在wordcount示例中处理大量的小文件。 它需要大量映射任务,并导致执行速度减慢 如何减少地图任务的数量 如果我的问题的最佳解决方案是将小文件转换为大文件,我如何才能转换它们?如果您使用的是类似于TextInputFormat的东西,问题是每个文件至少有一个拆分,因此贴图数的上限是文件数,在你有很多非常小的文件的情况下,最终会有很多映射器处理每个非常小的数据 为了解决这个问题,您应该使用CombineFileInputFormat,它将多个文件打包到同一个拆分中(我

我是hadoop新手,我正在wordcount示例中处理大量的小文件。 它需要大量映射任务,并导致执行速度减慢

如何减少地图任务的数量


如果我的问题的最佳解决方案是将小文件转换为大文件,我如何才能转换它们?

如果您使用的是类似于
TextInputFormat
的东西,问题是每个文件至少有一个拆分,因此贴图数的上限是文件数,在你有很多非常小的文件的情况下,最终会有很多映射器处理每个非常小的数据

为了解决这个问题,您应该使用
CombineFileInputFormat
,它将多个文件打包到同一个拆分中(我认为最多可以达到块大小限制),因此使用这种格式,映射器的数量将独立于文件的数量,它将仅仅取决于数据量

您必须通过从
CombineFileInputFormt
扩展来创建自己的输入格式,您可以找到一个实现。定义了
InputFormat
后,让我们像在链接
CombinedInputFormat
中那样调用它,您可以通过执行以下操作来告诉您的作业使用它:

job.setInputFormatClass(CombinedInputFormat.class);

Cloudera在不久前发布了一个关于小文件的问题。这是一个旧条目,但建议的方法仍然适用。

如果我想维护小文件的id,我该怎么办?有办法吗?