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

rseugnpd  于 2021-06-04  发布在  Hadoop
关注(0)|答案(2)|浏览(379)

我是hadoop的新手,我正在wordcount示例中处理大量的小文件。它需要很多Map任务,并导致执行速度减慢。
如何减少Map任务的数量??
如果我的问题的最佳解决方案是将小文件转换成大文件,我如何才能转换它们?

anhgbhbe

anhgbhbe1#

如果你用的是 TextInputFormat ,问题是每个文件至少有一个拆分,因此Map数的上限是文件数,在您有许多非常小的文件的情况下,最终会有许多Map者处理每个非常小的数据。
要解决这个问题,你应该使用 CombineFileInputFormat 它会将多个文件打包到同一个分割中(我认为最多可以达到块大小限制),因此使用这种格式,Map器的数量将独立于文件的数量,它将仅仅取决于数据量。
您必须通过扩展 CombineFileInputFormt ,您可以在这里找到一个实现。一旦你有了 InputFormat 定义好了,让我们在链接中这样称呼它 CombinedInputFormat ,你可以告诉你的工作如何使用它:

job.setInputFormatClass(CombinedInputFormat.class);
e3bfsja2

e3bfsja22#

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

相关问题