我是 hadoop 的新手,我在 wordcount 示例中处理大量小文件。 它需要大量 map task 并导致我的执行速度变慢。
如何减少 map task 的数量??
如果我的问题的最佳解决方案是将小文件转换为较大的文件,我该如何转换它们?
最佳答案
如果您使用的是 TextInputFormat
之类的东西,问题是每个文件至少有 1 个拆分,因此 map 数量的上限是文件数量,在您的情况下如果你有许多非常小的文件,你最终会得到许多映射器来处理每个非常小的数据。
为了解决这个问题,您应该使用 CombineFileInputFormat
它将多个文件打包到同一个拆分中(我认为达到 block 大小限制),因此使用该格式映射器的数量将是独立的文件数量的多少,将仅取决于数据量。
您必须通过从 CombineFileInputFormt
扩展来创建您自己的输入格式,您可以找到一个实现 here .定义了 InputFormat
后,让我们像在链接 CombinedInputFormat
中那样调用它,您可以通过以下方式告诉您的工作使用它:
job.setInputFormatClass(CombinedInputFormat.class);
关于hadoop - 我如何在 hadoop 中处理大量小文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14541759/