Hadoop 如何为减速器中的每个键输出单独的输出文件?

Hadoop 如何为减速器中的每个键输出单独的输出文件?,hadoop,mapreduce,Hadoop,Mapreduce,我有一个MapReduce程序,其中映射程序生成多个关键点。根据map-reduce框架,具有相同密钥的所有对被传输到相同的reducer。假设我有10把钥匙(总共)和3个减速器。减速机最后输出的是3个输出文件。是否有任何技术可以为每个键生成一个单独的输出文件,并在最后输出10个输出文件?可以有10个减速机,但当按键数量增加时,此解决方案可能不可行。这听起来不是个好主意。一旦开始将Hadoop用于真正的东西,您将面临严重的问题 但是如果你仍然需要它,为什么不跳过Reduce阶段呢。只需直接从映射

我有一个MapReduce程序,其中映射程序生成多个关键点。根据map-reduce框架,具有相同密钥的所有对被传输到相同的reducer。假设我有10把钥匙(总共)和3个减速器。减速机最后输出的是3个输出文件。是否有任何技术可以为每个键生成一个单独的输出文件,并在最后输出10个输出文件?可以有10个减速机,但当按键数量增加时,此解决方案可能不可行。

这听起来不是个好主意。一旦开始将Hadoop用于真正的东西,您将面临严重的问题


但是如果你仍然需要它,为什么不跳过Reduce阶段呢。只需直接从映射器发出输出,然后使用组合器。

如果您可以使用旧的
mapred
API,则有一种替代方法:

您可以选择覆盖的扩展名
MultipleTextOutputFormat
,然后将记录的所有内容设置为“value”的一部分,同时将文件名或路径设置为键

库中已经提供了一个实现:
multipleafvalueoutputformat
,您也可以自己实现


阅读更多关于它的信息。也请阅读我的类似答案。

跳过Reduce阶段的想法很棒。但是我如何将映射器的输出写入文件呢?您不必做任何事情。其工作原理与使用减速器时的情况类似。只需将reducer的数量设置为零。我实际上将reducer的数量设置为零,但最后只得到一个输出文件。你知道吗?因为你的数据太小了,所以生成多个映射程序来处理它会是一种过分的做法。你能解释一下为什么如果每个文件的大小都是64MB(假设hadoop块的大小也是64MB),那么它可能会不有效吗