Hadoop较小的输入文件

Hadoop较小的输入文件,hadoop,mapreduce,Hadoop,Mapreduce,我以一种稍微不同的方式使用hadoop。在我的例子中,输入大小非常小。然而,计算时间更长。我有一些复杂的算法,我将在每一行输入上运行。因此,即使输入大小小于5mb,总体计算时间也超过10小时。所以我在这里使用hadoop。我使用NLineInputFormat按行数而不是按块大小拆分文件。在我最初的测试中,我有大约1500行(分为200行),与在一台机器上串行运行相比,在四节点集群中我只看到了1.5倍的改进。我正在使用虚拟机。这是问题所在吗?或者对于较小的输入,hadoop不会有太多好处?任何见

我以一种稍微不同的方式使用hadoop。在我的例子中,输入大小非常小。然而,计算时间更长。我有一些复杂的算法,我将在每一行输入上运行。因此,即使输入大小小于5mb,总体计算时间也超过10小时。所以我在这里使用hadoop。我使用NLineInputFormat按行数而不是按块大小拆分文件。在我最初的测试中,我有大约1500行(分为200行),与在一台机器上串行运行相比,在四节点集群中我只看到了1.5倍的改进。我正在使用虚拟机。这是问题所在吗?或者对于较小的输入,hadoop不会有太多好处?任何见解都会非常有帮助。

对我来说,你的工作量非常大SETI@Home工作负载——较小的有效负载,但需要数小时的工作时间

Hadoop(或者更具体地说HDFS)不是为很多小文件设计的。但我怀疑这对于您正在使用的处理框架MapReduce来说是个问题

如果您想保持工作量不变,请执行以下操作: 1) 将它们拆分为单个文件(一个工作负载,一个文件),如果文件小于块大小,则它将转到一个映射器。典型的块大小为64MB或128MB

2) 为FileInputFormat创建包装,并将“isSplitable()”方法重写为false。这将确保将整个文件内容提供给一个映射器,而不是hadoop试图逐行分割它


参考资料:

对我来说,你的工作量与SETI@Home工作负载——较小的有效负载,但需要数小时的工作时间

Hadoop(或者更具体地说HDFS)不是为很多小文件设计的。但我怀疑这对于您正在使用的处理框架MapReduce来说是个问题

如果您想保持工作量不变,请执行以下操作: 1) 将它们拆分为单个文件(一个工作负载,一个文件),如果文件小于块大小,则它将转到一个映射器。典型的块大小为64MB或128MB

2) 为FileInputFormat创建包装,并将“isSplitable()”方法重写为false。这将确保将整个文件内容提供给一个映射器,而不是hadoop试图逐行分割它


参考资料:

Hadoop并不擅长处理大量的小文件,因此,通常需要将大量较小的输入文件组合成较少的较大文件,以减少映射程序的数量

Hadoop MapReduce进程的输入由
InputFormat
抽象
FileInputFormat
是处理HDFS中文件的默认实现。使用
FileInputFormat
,每个文件被分割成一个或多个
inputspits
通常以
块大小为上限。这意味着输入拆分的数量受输入文件数量的下限限制。对于处理大量小文件的MapReduce进程来说,这不是一个理想的环境,因为协调分布式进程的开销远远大于处理大量小文件的开销

驱动spit大小的基本参数是
mapred.max.split.size

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


查看我的实现以获得另一个答案。

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

Hadoop MapReduce进程的输入由
InputFormat
抽象
FileInputFormat
是处理HDFS中文件的默认实现。使用
FileInputFormat
,每个文件被分割成一个或多个
inputspits
通常以
块大小为上限。这意味着输入拆分的数量受输入文件数量的下限限制。对于处理大量小文件的MapReduce进程来说,这不是一个理想的环境,因为协调分布式进程的开销远远大于处理大量小文件的开销

驱动spit大小的基本参数是
mapred.max.split.size

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


检查我的实现以获得另一个答案。

感谢您的输入。逐行拆分有什么缺点吗?总而言之,您的意思是我应该将输入文件拆分成更小的文件。假设我创建了8个文件,每个文件有n/8行。那么我应该做你上面提到的第二点?我不明白这样做比逐行分割有什么好处。在我的例子中,我以(总行数/总节点数)的形式将其拆分。它实际上不是一行。1)一个“记录”是否适合一行?如果是这样,那么让hadoop来进行拆分。如果“记录”跨越多行,则需要控制拆分。2) 如果您让hadoop进行拆分,那么您的输入就不是在一个文件中,而是在多个文件中。这样,处理将在节点(更具体地说是映射器)之间并行化,而无需进行任何特殊工作,希望这有助于了解输入。逐行拆分有什么缺点吗?总而言之,您的意思是我应该将输入文件拆分成更小的文件。假设我创建了8个文件,每个文件有n/8行。那么我应该做你上面提到的第二点?我不明白这样做比逐行分割有什么好处。在我的例子中,我以(总行数/总节点数)的形式将其拆分。它实际上不是一行。1)一个“记录”是否适合一行?如果是这样,那么让hadoop来进行拆分。如果您的“记录”跨越多行,那么您需要