我的工作是计算密集型的,所以我实际上只使用Hadoop的分发功能,我希望我所有的输出都在一个文件中,所以我将减速器的数量设置为1。我的减速器实际上什么也没做…
通过显式地将还原器的数量设置为0,我可以知道如何在映射器中控制以强制将所有输出写入同一个1输出文件吗?谢谢。
在Hadoop中你不能这样做。你的映射器必须分别写入独立的文件。这使得它们变得高效(没有竞争或网络传输)。如果你想合并所有这些文件,你需要一个简化器。或者,你可以让它们成为单独的文件,并在下载文件时合并它们(例如,使用HDFS的命令行cat
或getmerge
选项)。
编辑:从你的评论中,我看到你想要的是摆脱编写减速器的麻烦。这绝对是可能的。要做到这一点,你可以使用IdtyReducer
。你可以在这里检查它的API,这里有0减速器与使用IdtyReducer
的解释。
最后,当我说让多个映射器生成单个输出是不可能的,我的意思是在HDFS中使用普通文件是不可能的。您可以对其他类型的输出执行此操作,例如让所有映射器写入单个数据库。如果您的映射器没有生成太多输出,这是可以的。有关如何工作的详细信息,请参阅此处。
Cabad
在大多数情况下是正确的。但是,如果您想使用单个Mapper
处理文件到单个输出文件,您可以使用FileInputFormat
将文件标记为不可拆分。这样做以及将减速器的数量设置为0。这会降低使用多个数据节点的性能,但会跳过Shuffle和Sort。