我有一个map-reduce作业,其输入是一个大数据集(假设大小为100GB)。这个map-reduce工作的作用是将大数据拆分成块并编写单独的文件,每个数据块一个。也就是说,作业的输出是多个文件,每个文件大小为64MB。
此map-reduce作业的输出用作另一个map-reduce作业的输入。由于新输入包含多个文件,每个文件大小为64MB,第二个map-reduce作业中的每个映射器是否只读取一个文件,或者它可能读取多个文件?
答案 0 :(得分:1)
默认情况下,JobTracker会将地图任务分配给一个块。您可以使用CombineFileInputFormat来解决此问题并将多个块blob到一个输入拆分中(但这不是您所要求的)。
在您的情况下,如果您的文件超过64MB且默认块大小为64MB,则每个~64MB文件最终会有两个块,这可能很糟糕。如果所有文件都低于块大小,则每个块应该有一个映射器。
我想知道为什么你有第一个mapreduce工作。您基本上是在重新创建Hadoop为您免费提供的功能。如果你有一堆大的文件加起来达到100GB,让Hadoop的块为你做“分裂”。例如,使用64MB块大小的140MB文件将自动拆分为64MB,64MB和12MB块。三个映射器将产生以处理该文件。