MapReduce 排序过程分析
发布时间
阅读量:
阅读量
【1】Hadoop默认的排序算法,只会针对key值进行排序,按照字典顺序排序
【2】二次排序,在一个数据文件中,首先按照key排序。在key相同的情况下,再按照value大小排序。难度在于要同时参考两列的数据,可以将一行中的两列值封装到bean中。实现WritableComparable接口,重写compareTo进行排序,指定比较规则,实现二次排序,具体可参见博客
【3】全局排序
1、使用一个Reducer
优点:实现简单
缺点:没有利用分布式
2、重写Partioner类
通过重写Partition类,把key在一个范围内的发往一个固定的Reducer,这样在一个Reducer内key是全排序的,在Reducer之间按照序号也是排好序的。比如key代表的是一个年龄,可以把数据输出到10个Reducer。1-10岁之间发往第0个Reducer,11-20发往第2个Reducer,以此类推。但是这样做有两个缺点:
- 当数据量大时会出现OOM(内存用完了)
- 会出现数据倾斜
3、 TotalOrderPartitioner类
Hadoop提供TotalOrderPartitioner 类用于实现全局排序的功能,并且解决了OOM和数据倾斜的问题。TotalOrderPartitioner类提供了数据采样器,对key值进行部分
全部评论 (0)
还没有任何评论哟~
