【问题标题】:how can i work with large number of small files in hadoop?如何在 hadoop 中处理大量小文件?
【发布时间】:2013-01-26 21:28:09
【问题描述】:

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

如何减少地图任务的数量??

如果我的问题的最佳解决方案是将小文件转换为更大的文件,我该如何对它们进行分类?

【问题讨论】:

    标签: hadoop


    【解决方案1】:

    如果您使用TextInputFormat 之类的东西,问题是每个文件至少有 1 个拆分,因此映射数量的上限是文件数量,在您的情况下,您有很多非常小文件,您最终将有许多映射器处理每个非常小的数据。

    要解决这个问题,您应该使用CombineFileInputFormat,它将多个文件打包到同一个拆分中(我认为达到块大小限制),因此使用这种格式,映射器的数量将与文件的数量无关,它只取决于数据量。

    您必须通过从CombineFileInputFormt 扩展来创建自己的输入格式,您可以找到实现here。一旦你定义了你的InputFormat,让我们像链接CombinedInputFormat一样调用它,你可以告诉你的工作使用它:

    job.setInputFormatClass(CombinedInputFormat.class);
    

    【讨论】:

    • 如果我想维护小文件的id,我该怎么办?有什么办法吗?
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-12
      • 1970-01-01
      • 1970-01-01
      • 2012-03-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多