1

我的工作是计算密集型的,所以我实际上只使用 Hadoop 的分发功能,我希望我的所有输出都在 1 个单个文件中,所以我将减速器的数量设置为 1。我的减速器实际上什么也没做......

通过将reducer的数量显式设置为0,我可以知道如何在映射器中控制以强制将所有输出写入同一个输出文件吗?谢谢。

4

2 回答 2

1

你不能在 Hadoop 中做到这一点。您的每个映射器都必须写入独立的文件。这使它们高效(无争用或网络传输)。如果你想合并所有这些文件,你需要一个 reducer。或者,您可以让它们成为单独的文件,并在下载它们时合并文件(例如,使用 HDFS 的命令行catgetmerge选项)。

编辑:从您的评论中,我看到您想要摆脱编写减速器的麻烦。这绝对是可能的。为此,您可以使用IdentityReducer. 您可以在此处查看其 API ,并在此处提供 0 reducers 与使用IdentityReducer说明

最后,当我说不可能有多个映射器生成单个输出时,我的意思是 HDFS 中的纯文件是不可能的。您可以使用其他类型的输出来执行此操作,例如让所有映射器写入单个数据库。如果您的映射器没有产生太多输出,这没关系。此处提供了有关其工作原理的详细信息。

于 2013-10-31T15:12:17.817 回答
0

cabad在大多数情况下是正确的。但是,如果您想使用单个Mapper到单个输出文件处理文件,则可以使用FileInputFormat将文件标记为不可拆分的 a 。执行此操作并将 Reducer 的数量设置为 0。这会降低使用多个数据节点的性能,但会跳过 Shuffle 和 Sort。

于 2013-10-31T15:33:50.890 回答