繁体   English   中英

Hadoop较小的输入文件

[英]Hadoop smaller input file

我以某种不同的方式使用hadoop。 就我而言,输入大小确实很小。 但是,计算时间更多。 我有一些复杂的算法,将在输入的每一行上运行。 因此,即使输入大小小于5mb,整个计算时间仍超过10小时。 所以我在这里使用hadoop。 我正在使用NLineInputFormat按行数而不是块大小分割文件。 在最初的测试中,我大约有1500条线(拆分为200条线),与在一台计算机上串行运行相比,在四节点群集中仅看到1.5倍的改进。 我正在使用VM。 这可能是问题,还是对于较小尺寸的输入,hadoop不会带来太多好处? 任何见解都会非常有帮助。

对我来说,您的工作量类似于SETI @ Home的工作量-很小的有效载荷,但是却要花费数小时的时间。

Hadoop(或更确切地说是HDFS)并非为大量小文件而设计。 但是我怀疑这对于MapReduce是一个问题-您正在使用的处理框架。

如果要将工作负载放在一起:1)将它们分成单个文件(一个工作负载,一个文件),如果该文件小于块大小,则它将转到一个映射器。 典型的块大小为64MB或128MB

2)为FileInputFormat创建包装器,并将'isSplitable()'方法重写为false。 这将确保将整个文件内容馈送到一个映射器,而不是hadoop试图逐行拆分它

参考: http : //hadoopilluminated.com/hadoop_book/HDFS_Intro.html

Hadoop并不是真正擅长处理大量小文件,因此,通常需要将大量较小的输入文件合并为较少数量的较大文件,以减少映射器的数量。

作为Input to Hadoop的MapReduce流程由InputFormat抽象化。 FileInputFormat是处理HDFS中文件的默认实现。 使用FileInputFormat ,每个文件被分成一个或多个InputSplits通常以block size为上限。 这意味着输入拆分的数量受输入文件数量的下限限制。 当MapReduce进程处理大量小文件时,这不是理想的环境,因为协调分布式进程的开销远远大于存在大量小文件时的开销。

驱动吐痰尺寸的基本参数是mapred.max.split.size

使用CombineFileInputFormat和此参数,我们可以控制映射器的数量。

这里检查实现的另一个答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM