源代码分析( mapreduce.lib.partition/reduce/output )
Map 的结果,会通过 partition 分发到 Reducer 上,Reducer 做完 Reduce 操作后,通
过 OutputFormat,进行输出,下面我们就来分析参与这个过程的类。
Mapper 的结果,可能送到可能的 Combiner 做合并,Combiner 在系统中并没有自己的
基类,而是用 Reducer 作为 Combiner 的基类,他们对外的功能是一样的,只是使用的位
置和使用时的上下文不太一样而已。
Mapper 最终处理的结果对<key, value>,是需要送到 Reducer 去合并的,合并的时候,
有相同 key 的键/值对会送到同一个 Reducer 那,哪个 key 到哪个 Reducer 的分配过程,
是由 Partitioner 规定的,它只有一个方法,输入是 Map 的结果对<key, value>和
Reducer 的数目,输出则是分配的 Reducer(整数编号)。系统缺省的 Partitioner 是
HashPartitioner,它以 key 的 Hash 值对 Reducer 的数目取模,得到对应的 Reducer。
Reducer 是所有用户定制 Reducer 类的基类,和 Mapper 类似,它也有
setup,reduce,cleanup 和 run 方法,其中 setup 和 cleanup 含义和 Mapper 相同,
reduce 是真正合并 Mapper 结果的地方,它的输入是 key 和这个 key 对应的所有 value