0

我有这样一份 Hadoop 工作。MR 只有 map ,没有 reduce。所以设置job.setNumReduces(0)。输入文件大约300+

然后我运行作业,我只能看到 1 个地图任务正在运行。完成它大约需要 1 小时。然后我检查结果,我可以在输出文件夹中看到 300 多个结果文件。

有什么问题吗?还是它是正确的?

我真的希望 Map 应该等于输入文件的 num (而不是 1 )。我也不知道为什么输出文件 num 与输入文件 num 相同。

hadoop 作业是从 oozie 提交的。

非常感谢您的热心帮助。新松

4

2 回答 2

1

当您将 reducer 的数量设置为 0 时,生成的输出对应于单独的 map 任务生成的输出。

输出中可能会生成大量文件,这些文件与您的数据上的拆分相对应。您的数据的每个拆分都会产生一个新的地图任务。

在执行时,我假设您的文件大小非常大而不是 1。因此生成大量文件非常好。

于 2013-10-29T08:26:05.643 回答
1

映射器的数量由 InputSplit 的数量控制。如果您使用默认 FileInputFormat 它将为每个文件创建一个输入拆分。因此,如果您有 300 多个输入文件,则预计将运行 300 多个地图任务。你不能明确控制这个(映射器的数量)。

由于减速器的数量设置为 0,映射器的所有输出都运行写入输出,考虑到输出格式。这就是为什么你得到 300 多个输出文件的原因。

于 2013-10-29T08:29:46.410 回答