Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我有一个 map-reduce 程序,其中映射器生成多个键。根据 map-reduce 框架,所有具有相同 key 的对都被传输到同一个 reducer。假设我有 10 个键(总共)和 3 个减速器。reducer 最后输出的是 3 个输出文件。是否有任何技术可以为每个键生成单独的输出文件并在最后输出 10 个输出文件?有 10 个 reducer 是可能的,但是当键的数量增加时,这个解决方案可能是不可能的。
这听起来不是一个好主意。一旦您开始将 Hadoop 用于实际工作,您将面临严重的问题。
但是,如果您仍然需要它,为什么不跳过 Reduce 阶段。只需直接从 Mappers 发出输出,然后是 Combiner。
如果您可以使用旧mapredAPI,则可以使用另一种方法:
mapred
您可以选择覆盖的扩展名,MultipleTextOutputFormat然后将记录的所有内容作为“值”的一部分,同时将文件名或路径作为键。
MultipleTextOutputFormat
在oddjob库中已经提供了一个实现:MultipleLeafValueOutputFormat您也可以自己实现。
MultipleLeafValueOutputFormat
在此处阅读更多相关信息。也在这里阅读我的类似答案。