框架输入文本:
symbol time price
a 1 10
a 2 20
b 3 30
Map 输出: 创建复合key、复合values 如下:
symbol-time time-price
a-1 1-10
a-2 2-20
b-3 3-30
Map输出后 Partitioner 的操作: 将 a-1和 a-2 发送到由到同一个 Reducer 上,尽管它们的复合key 不同,它还将把b-3 发送到一个单独的 Reducer。(拙异注释:作者实现的 Partitioner 的仅根据复合 key 里面的 symbol 进行分区,a-1、a-2 symbol一致都是a,所以进入同一个 Reducer)。
之后在 Reduer 中 GroupComparator 的操作:当复合键 key\value 进入ReducerTask后,Reducer得到的
不是:
(a-1,{1-10})
(a-2,{2-20})
而是
(a-1,{1-10,2-20})
GroupComparator 会确把 a-1,a-2 看成同一组,然后把a-1,a-2 对应的 value 组合到一起,因为 a-1 排在分组的最前面,所以 a-1 作为 key,得到如上的结果。
综上 GroupComparator 的作用可以理解为对 (K, V[list]) 的进一步合并。
————————————————————————————————————————