我有一个map-reduce程序,其中映射器生成多个键。根据map-reduce框架,所有具有相同键的对都被转移到同一个化简器。假设我有 10 个键(总共)和 3 个减速器。化简器最后输出的是 3 个输出文件。是否有任何技术可以为每个键生成单独的输出文件并在最后输出 10 个输出文件?可以有 10 个化简器,但是当键的数量增加时,此解决方案可能是不可能的。
这听起来不是一个好主意。一旦你开始使用Hadoop做实际的事情,你将面临严重的问题。
但是,如果您仍然需要它,为什么不跳过减少阶段。只需直接从映射器发出输出,然后是合路器。
如果您同意使用旧的mapred
API,那么还有另一种方法可以执行此操作:
您可以选择覆盖MultipleTextOutputFormat
扩展名,然后将记录的所有内容作为"值"的一部分,同时将文件名或路径作为键。
奇数库中已经提供了一个实现:MultipleLeafValueOutputFormat
,你也可以自己实现。
在此处阅读更多相关信息。也在这里阅读我的类似答案。