Hadoop 如何为减速器中的每个键输出单独的输出文件?
我有一个MapReduce程序,其中映射程序生成多个关键点。根据map-reduce框架,具有相同密钥的所有对被传输到相同的reducer。假设我有10把钥匙(总共)和3个减速器。减速机最后输出的是3个输出文件。是否有任何技术可以为每个键生成一个单独的输出文件,并在最后输出10个输出文件?可以有10个减速机,但当按键数量增加时,此解决方案可能不可行。这听起来不是个好主意。一旦开始将Hadoop用于真正的东西,您将面临严重的问题Hadoop 如何为减速器中的每个键输出单独的输出文件?,hadoop,mapreduce,Hadoop,Mapreduce,我有一个MapReduce程序,其中映射程序生成多个关键点。根据map-reduce框架,具有相同密钥的所有对被传输到相同的reducer。假设我有10把钥匙(总共)和3个减速器。减速机最后输出的是3个输出文件。是否有任何技术可以为每个键生成一个单独的输出文件,并在最后输出10个输出文件?可以有10个减速机,但当按键数量增加时,此解决方案可能不可行。这听起来不是个好主意。一旦开始将Hadoop用于真正的东西,您将面临严重的问题 但是如果你仍然需要它,为什么不跳过Reduce阶段呢。只需直接从映射
但是如果你仍然需要它,为什么不跳过Reduce阶段呢。只需直接从映射器发出输出,然后使用组合器。如果您可以使用旧的
mapred
API,则有一种替代方法:
您可以选择覆盖的扩展名MultipleTextOutputFormat
,然后将记录的所有内容设置为“value”的一部分,同时将文件名或路径设置为键
库中已经提供了一个实现:multipleafvalueoutputformat
,您也可以自己实现
阅读更多关于它的信息。也请阅读我的类似答案。跳过Reduce阶段的想法很棒。但是我如何将映射器的输出写入文件呢?您不必做任何事情。其工作原理与使用减速器时的情况类似。只需将reducer的数量设置为零。我实际上将reducer的数量设置为零,但最后只得到一个输出文件。你知道吗?因为你的数据太小了,所以生成多个映射程序来处理它会是一种过分的做法。你能解释一下为什么如果每个文件的大小都是64MB(假设hadoop块的大小也是64MB),那么它可能会不有效吗