java – 使用Hadoop处理大量小文件

前端之家收集整理的这篇文章主要介绍了java – 使用Hadoop处理大量小文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用Hadoop示例程序WordCount来处理大量的小文件/网页(cca.2-3 kB).由于这远离hadoop文件的最佳文件大小,因此程序非常慢.我想这是因为设置和撕毁工作的成本远远高于工作本身.这些小文件也会导致文件名的命名空间耗尽.

我读到在这种情况下我应该使用HDFS归档(HAR),但我不知道如何修改此程序WordCount以从此档案中读取.程序可以继续工作而无需修改或需要进行一些修改吗?

即使我在档案中打包了很多文件,问题仍然存在,这是否会提高性能.我读到即使我打包多个文件,一个存档中的这些文件也不会由一个映射器处理,但很多,在我的情况下(我猜)不会提高性能.

如果这个问题太简单,请理解我是Hadoop的新手并且对它的经验很少.

解决方法

使用HDFS不会改变你导致hadoop处理大量小文件的情况.在这种情况下,最好的选择可能是将文件捕获到单个(或几个大)文件中.
这将减少您拥有的映射器数量,这将减少需要处理的事物数量.

如果您在分布式系统上运行,则使用HDFS可以提高性能.如果你只是伪分布式(一台机器),那么HDFS不会提高性能.限制是机器.

当您对大量小文件进行操作时,需要大量的映射器和缩减器.设置/关闭可以与文件本身的处理时间相比,从而导致很大的开销.对文件进行处理会减少作业的映射器hadoop运行次数,从而提高性能.

使用HDFS存储文件时可以看到的好处是分布式模式,有多台机器.这些文件将存储在跨机器的块(默认为64MB)中,每台机器都能够处理驻留在机器上的数据块.这减少了网络带宽的使用,因此它不会成为处理的瓶颈.

归档文件,如果hadoop将取消归档它们只会导致hadoop仍然有大量的小文件.

希望这有助于您的理解.

猜你在找的Java相关文章