hadoopmap和reduce区别(大数据之-Hadoop3.xMapReduce排序概述)
hadoopmap和reduce区别(大数据之-Hadoop3.xMapReduce排序概述)3. 可以看到MapReduce框架中 默认都是会排序的 不管你需不需要2.然后我们再看在reduce阶段 会先把map阶段整理好的数据 拉取过来 然后 拉取的动作是reduceTask完成的 然后拉取以后 因为有可能是从不同的分区 也就是不同的mapTask中拉取过来的 所以 reduceTask又对拉取过来的数据进行了一次归并排序 当然归并排序以后 还可以对数据进行一次分组排序 也可以我们自定义分组排序 这个后面再说吧.经过这些排序就可以交给reducer进行数据处理了.
1.看MapReduce的排序 我们先看一下 map方法之后 数据整理以后会 进入环形缓冲区 然后
环形缓冲区中的数据满了以后 多于百分之80的时候 会进行数据溢写 数据溢写之前会进行排序对吧 可以看到分区内的数据会进行分区快排 快排以后 然后会一些到文件 然后会再对这个区内有序的文件会再进行归并排序.上面的map阶段的排序.
2.然后我们再看在reduce阶段 会先把map阶段整理好的数据 拉取过来 然后 拉取的动作是reduceTask完成的 然后拉取以后 因为有可能是从不同的分区 也就是不同的mapTask中拉取
过来的 所以 reduceTask又对拉取过来的数据进行了一次归并排序 当然归并排序以后 还可以对数据进行一次分组排序 也可以我们自定义分组排序 这个后面再说吧.经过这些排序就可以交给reducer进行数据处理了.
3. 可以看到MapReduce框架中 默认都是会排序的 不管你需不需要
4.可以看到 如果数据 从map读取过来的数据 没有经过排序的话 那么
很可能就会出现 <a 1><c 1><a 1> 这样的情况 那么我们再去使用的时候 就需要
我们自己去判断了...根据不同的key 判断key一样的 去做什么操作 这样就
增加了程序工作者的难度.所以 map在溢写的时候 一定会给咱们排序
排序的时候用的是快排算法 其实就按照字典顺序去排序对吧.
5.可以看到默认是 按照字典顺序排序 并且是使用快速排序算法进行排序.
6.可以看到由于maptask会把处理的数据 暂时放到环形缓冲区 当环形缓冲区使用率达到百分之80
那么 就会对环形缓冲区中的数据进行一次快速排序 然后 再将这些经过排序后的有序数据 写到
磁盘上去.
7.部分排序就是经过map以后 出来的很多的分区文件 每个分区文件内部是有序的 经过快排 排序过的每个文件内部是有序的.
8.然后还有就是全排序 在正式环境下如果有 动不动几十个T 几个PB的数据 这个时候是不能进行
全排序的 这样效率太低了.这个的实现方式实际上就是设置reduceTask的个数是1就可以了 这样就会只出现一个结果文件 并且是经过排序的.
9.还有一种是辅助排序 就是说 当map方法执行以后 然后reduceTask 拉取了数据 然后进行
数据的归并排序 然后再进行一次这个辅助排序 这个是自定义的 可以做 可以不做 可以根据自己的
需求去做.
10. 还有一种是二次排序 就是说 可以自定义这个compareTo方法 这样的话 比如我们那个
统计手机号使用流量的例子 可以让他先按照手机号流量使用情况排序 然后再按照再按照 比如
手机使用流量的 上行流量排序 然后再按照 下行流量排序.
11.然后我们看看如何重写这个compareTo接口 可以看到把我们之前自定义的那个 存储流量情况的
FlowBean传入了.我们之前也说过 我们定义的 数据的key 必须是可排序的对吧.
12.然后我们需要继承这个WriteComparable接口.
下一节我们就是用WriteComparable接口 进行一次排序.