0

我有一个 map-reduce 作业,其输入是一个大数据集(假设大小为 100GB)。这个 map-reduce 工作所做的是将大数据分成块并编写单独的文件,每个数据块一个。也就是说,作业的输出是多个文件,每个文件大小为 64MB。

此 map-reduce 作业的输出用作另一个 map-reduce 作业的输入。由于新输入由多个文件组成,每个文件大小为 64MB,第二个 map-reduce 作业中的每个映射器是只读取一个文件还是读取多个文件?

4

1 回答 1

1

默认情况下,JobTracker 会将地图任务分配给一个块。您可以使用CombineFileInputFormat来解决此问题并将多个块放入一个输入拆分中(但这不是您要问的)。

在您的情况下,如果您的文件超过 64MB 并且您的默认块大小为 64MB,那么每个 ~64MB 文件可能会得到两个块,这可能很糟糕。如果所有文件都小于块大小,则每个块应该有一个映射器。

我想知道为什么你有第一份 mapreduce 工作。您基本上是在重新创建 Hadoop 为您免费提供的功能。如果您有一堆加起来高达 100GB 的大文件,让 Hadoop 的块为您“拆分”。例如,使用 64MB 块大小的 140MB 文件将自动拆分为 64MB、64MB 和 12MB 块。将产生三个映射器来处理该文件。

于 2013-09-21T03:33:48.340 回答