大量Hadoop输出文件

大量Hadoop输出文件,hadoop,Hadoop,在Hadoop中,有没有一种合理的方法来编写大量的输出文件?我一直在使用多重输出。然而,multipleOutput为每个文件分配了一个大的(~1MB)缓冲区,所以我遇到了内存问题 我的数据的顺序是这样的,在任何给定的reducer中,我都可以写入目标文件,关闭它,然后转到下一个文件。不幸的是,multipleoutput没有公开关闭给定文件的方法。我已经编写了一个修改过的multipleoutput,它公开了这样一个方法,并处理了这个问题,但这似乎并不理想 另一种选择是最后一步,将输出拆分为所

在Hadoop中,有没有一种合理的方法来编写大量的输出文件?我一直在使用多重输出。然而,multipleOutput为每个文件分配了一个大的(~1MB)缓冲区,所以我遇到了内存问题

我的数据的顺序是这样的,在任何给定的reducer中,我都可以写入目标文件,关闭它,然后转到下一个文件。不幸的是,multipleoutput没有公开关闭给定文件的方法。我已经编写了一个修改过的multipleoutput,它公开了这样一个方法,并处理了这个问题,但这似乎并不理想


另一种选择是最后一步,将输出拆分为所需的文件,但我不确定是否有好的方法。每个减速机将生成一个输出文件,减速机数量越多,o/p文件数量越多,大小越小

也许你可以限制减速机的数量。 但要确保有限的减速器得到优化


e、 g.如果将reducers设置为1,则只有1个进程必须处理所有映射器数据,因此会增加处理时间。

请定义“大数字”。您希望的功能是什么?输出文件的数量等于减缩器的数量,因此一个快速的解决方法是根据所需的输出文件数量设置尽可能多的减缩器;输出的大小差别很大。基本上,我想将输出拆分为大约1000个逻辑单元,按特定id进行拆分。使用应该使用的多个输出,这会导致每个减速机有1000个输出,我同意,它们可以稍后合并,但因为多个输出在每次输出时都会使用一个大的缓冲区,所以我遇到内存问题。我可以通过破解MultipleOutput来缓解这个问题,允许在作业结束之前关闭文件,因为我的地图输出是按id排序的,但这并不理想。