hadoop的mapreduce实现中 对于key的全排序和对于value的排序
2011-12-01 15:21
597 查看
先说对于key的全排序。
其实如果只有一个partition,则最终的结果肯定是全排序的,因为一个partition对应一个reduce的task,然而reduce的输入本来就是对key有序的。当然只有一个partition不能体现出分布式的威力。如果是分多个partition呢,则只要确保partition是有序的就行了。比如:partition1中的最小值比partition2的最大值要大。但是这里又有另外一个问题,就是你在定义每个partition的边界的时候,可能会导致每个partition上分配到的记录数相差很大,这样数据最多的partition就会拖慢整个系统。这时候我们期望的就是每个partition上分配的数据量基本相同,hadoop提供了一个采样器帮我们预估整个边界,以使数据的分配尽量平均。具体见《hadoop 权威指南》p237
再说对于value的排序问题。
hadoop本身并不提供对于value排序的支持,但是可以通过他提供的secondary sort来达成这一目标。怎么做的呢?说白了这里对于value的排序其实还是对于key的排序,只不过这个时候排序使用的key实际上是key+value的组合,但是这个时候问题是“value没有了”,因为value被放到key里面了。那么这个时候reduce如何才能按照原本的key value输入来处理呢,hadoop在reduce之前引入了group 的概念,这个group功能其实就是把key+value的输入按照key做了分组,然后对于每个分组还是按照key value的输入来处理。注意了,这个时候对于同一个key的分组内,value已经是排序的了,因为之前是对于key+value这个组合做的排序,而且排序过程中的比较函数是自己定义的。这个方法是在《hadoop 权威指南》p241的secondary sort中有描述。
其实如果只有一个partition,则最终的结果肯定是全排序的,因为一个partition对应一个reduce的task,然而reduce的输入本来就是对key有序的。当然只有一个partition不能体现出分布式的威力。如果是分多个partition呢,则只要确保partition是有序的就行了。比如:partition1中的最小值比partition2的最大值要大。但是这里又有另外一个问题,就是你在定义每个partition的边界的时候,可能会导致每个partition上分配到的记录数相差很大,这样数据最多的partition就会拖慢整个系统。这时候我们期望的就是每个partition上分配的数据量基本相同,hadoop提供了一个采样器帮我们预估整个边界,以使数据的分配尽量平均。具体见《hadoop 权威指南》p237
再说对于value的排序问题。
hadoop本身并不提供对于value排序的支持,但是可以通过他提供的secondary sort来达成这一目标。怎么做的呢?说白了这里对于value的排序其实还是对于key的排序,只不过这个时候排序使用的key实际上是key+value的组合,但是这个时候问题是“value没有了”,因为value被放到key里面了。那么这个时候reduce如何才能按照原本的key value输入来处理呢,hadoop在reduce之前引入了group 的概念,这个group功能其实就是把key+value的输入按照key做了分组,然后对于每个分组还是按照key value的输入来处理。注意了,这个时候对于同一个key的分组内,value已经是排序的了,因为之前是对于key+value这个组合做的排序,而且排序过程中的比较函数是自己定义的。这个方法是在《hadoop 权威指南》p241的secondary sort中有描述。
相关文章推荐
- mapreduce 利用InverseMapper.class对key,value进行 交换实现词频排序
- mapreduce 利用InverseMapper.class对key,value进行 交换实现词频排序
- mapreduce 利用InverseMapper.class对key,value进行 交换实现词频排序 .
- 关于hadoop的mapreduce编程中自定义key,value建立的类实现writable接口
- (hadoop学习-1)mapreduce实现数据过滤、聚合与排序
- hadoop 自定义分组排序,求相同key中value最小值
- Java中Map根据键值(key)或者值(value)进行排序实现
- spark 对于key/value 排序 取前几 top take(转载)
- Java中Map根据键值(key)或者值(value)进行排序实现
- mapreduce实现对key的排序
- Hadoop1.x MapReduce 实现二次排序 实现WritableComparable接口
- MapReduce-WordCount实现按照value降序排序、字符小写、识别不同标点
- Java中Map根据键值(key)或者值(value)进行排序实现
- Hadoop 学习笔记 (十) MapReduce实现排序 全局变量
- Java中Map根据键值(key)或者值(value)进行排序实现
- (Hadoop学习-2)mapreduce实现二次排序
- Java中Map根据键值(key)或者值(value)进行排序实现
- Java 中 Map 根据键值 (key) 或者值 (value) 进行排序实现
- Java中Map根据键值(key)或者值(value)进行排序实现
- Java Map 按key排序和按Value排序的实现方法