学会定制MapReduce里的partition,sort和grouping,Secondary Sort Made Easy_HadoopChina_新浪博客
通过初期的几个开发员培训班,我发现有不少学员容易“偏爱”缺省的MapReduce行为,而忽略如何在代码里根据自己应用的需要来定制不同于系统缺省的行为。这篇文章结合Secondary Sort来介绍“Shuffle & Sort”里涉及到的三个重要操作。
缺省情况下,MapReduce Framework的Shuffle & Sort过程将所有和某一个键相关联的值“组合”(group)在一起,传送到一个唯一确定的Reducer,而且传送到每个Reducer的键是“排序”的(sort)。这对应到三个操作:1)“组合”; 2)“排序”; 和 3)partition(确定哪个键及其值的组合送到哪个Reducer)。
这三个操作涉及到最基本的MapRedcue工作原理,好理解。但是初学者容易忽略的地方是他们很容易记住这三个操作的缺省行为,却不清楚其实其中每一个的行为都是可以在代码里进行定制的。所以,下面首先介绍如何控制这三个操作行为:
- 定义partitioner来告诉MapReduce framework如何将见到的键和值送到哪个Reducer
- 定义key comparator来告诉MapReduce framework如何排序键
- 定义grouping comparator来告诉MapReduce framework如何控制“组合”键值在一起