Sas*_*asa 6 java hadoop mapreduce hdfs
我正在使用Hadoop示例程序WordCount来处理大量的小文件/网页(cca.2-3 kB).由于这远离hadoop文件的最佳文件大小,因此程序非常慢.我想这是因为设置和撕毁工作的成本远远高于工作本身.这些小文件也会导致文件名的命名空间耗尽.
我读到在这种情况下我应该使用HDFS归档(HAR),但我不知道如何修改此程序WordCount以从此档案中读取.程序可以继续工作而无需修改或需要进行一些修改吗?
即使我在档案中打包了很多文件,问题仍然存在,这是否会提高性能.我读到即使我打包多个文件,一个存档中的这些文件也不会由一个映射器处理,但很多,在我的情况下(我猜)不会提高性能.
如果这个问题太简单,请理解我是Hadoop的新手并且对它的经验很少.
使用 HDFS 不会改变让 hadoop 处理大量小文件的情况。在这种情况下,最好的选择可能是将cat文件放入单个(或几个大)文件中。这将减少您拥有的映射器的数量,从而减少需要处理的事物的数量。
如果您在分布式系统上运行,使用 HDFS 可以提高性能。如果您只进行伪分布式(一台机器),那么 HDFS 不会提高性能。限制是机器。
当您操作大量小文件时,将需要大量映射器和缩减器。setup/down 的处理时间可以与文件本身的处理时间相媲美,从而导致很大的开销。cat处理这些文件应该会减少 hadoop 为作业运行的映射器数量,从而提高性能。
使用 HDFS 存储文件的好处是采用多台机器的分布式模式。文件将跨机器存储在块(默认 64MB)中,并且每台机器都能够处理驻留在该机器上的数据块。这减少了网络带宽的使用,因此不会成为处理的瓶颈。
归档文件,如果hadoop要取消归档它们,只会导致hadoop仍然有大量小文件。
希望这有助于您的理解。