快捷搜索:  汽车  科技

hadoopmap和reduce区别(大数据之-Hadoop3.xMapReduce排序概述)

hadoopmap和reduce区别(大数据之-Hadoop3.xMapReduce排序概述)​3. 可以看到MapReduce框架中 默认都是会排序的 不管你需不需要2.然后我们再看在reduce阶段 会先把map阶段整理好的数据 拉取过来 然后 拉取的动作是reduceTask完成的 然后拉取以后 因为有可能是从不同的分区 也就是不同的mapTask中拉取过来的 所以 reduceTask又对拉取过来的数据进行了一次归并排序 当然归并排序以后 还可以对数据进行一次分组排序 也可以我们自定义分组排序 这个后面再说吧.经过这些排序就可以交给reducer进行数据处理了.​

hadoopmap和reduce区别(大数据之-Hadoop3.xMapReduce排序概述)(1)

hadoopmap和reduce区别(大数据之-Hadoop3.xMapReduce排序概述)(2)

1.看MapReduce的排序 我们先看一下 map方法之后 数据整理以后会 进入环形缓冲区 然后

环形缓冲区中的数据满了以后 多于百分之80的时候 会进行数据溢写 数据溢写之前会进行排序对吧 可以看到分区内的数据会进行分区快排 快排以后 然后会一些到文件 然后会再对这个区内有序的文件会再进行归并排序.上面的map阶段的排序.

hadoopmap和reduce区别(大数据之-Hadoop3.xMapReduce排序概述)(3)

hadoopmap和reduce区别(大数据之-Hadoop3.xMapReduce排序概述)(4)

2.然后我们再看在reduce阶段 会先把map阶段整理好的数据 拉取过来 然后 拉取的动作是reduceTask完成的 然后拉取以后 因为有可能是从不同的分区 也就是不同的mapTask中拉取

过来的 所以 reduceTask又对拉取过来的数据进行了一次归并排序 当然归并排序以后 还可以对数据进行一次分组排序 也可以我们自定义分组排序 这个后面再说吧.经过这些排序就可以交给reducer进行数据处理了.

hadoopmap和reduce区别(大数据之-Hadoop3.xMapReduce排序概述)(5)

hadoopmap和reduce区别(大数据之-Hadoop3.xMapReduce排序概述)(6)

3. 可以看到MapReduce框架中 默认都是会排序的 不管你需不需要

hadoopmap和reduce区别(大数据之-Hadoop3.xMapReduce排序概述)(7)

hadoopmap和reduce区别(大数据之-Hadoop3.xMapReduce排序概述)(8)

4.可以看到 如果数据 从map读取过来的数据 没有经过排序的话 那么

很可能就会出现 <a 1><c 1><a 1> 这样的情况 那么我们再去使用的时候 就需要

我们自己去判断了...根据不同的key 判断key一样的 去做什么操作 这样就

增加了程序工作者的难度.所以 map在溢写的时候 一定会给咱们排序

排序的时候用的是快排算法 其实就按照字典顺序去排序对吧.

hadoopmap和reduce区别(大数据之-Hadoop3.xMapReduce排序概述)(9)

hadoopmap和reduce区别(大数据之-Hadoop3.xMapReduce排序概述)(10)

5.可以看到默认是 按照字典顺序排序 并且是使用快速排序算法进行排序.

hadoopmap和reduce区别(大数据之-Hadoop3.xMapReduce排序概述)(11)

hadoopmap和reduce区别(大数据之-Hadoop3.xMapReduce排序概述)(12)

6.可以看到由于maptask会把处理的数据 暂时放到环形缓冲区 当环形缓冲区使用率达到百分之80

那么 就会对环形缓冲区中的数据进行一次快速排序 然后 再将这些经过排序后的有序数据 写到

磁盘上去.

hadoopmap和reduce区别(大数据之-Hadoop3.xMapReduce排序概述)(13)

hadoopmap和reduce区别(大数据之-Hadoop3.xMapReduce排序概述)(14)

7.部分排序就是经过map以后 出来的很多的分区文件 每个分区文件内部是有序的 经过快排 排序过的每个文件内部是有序的.

hadoopmap和reduce区别(大数据之-Hadoop3.xMapReduce排序概述)(15)

hadoopmap和reduce区别(大数据之-Hadoop3.xMapReduce排序概述)(16)

8.然后还有就是全排序 在正式环境下如果有 动不动几十个T 几个PB的数据 这个时候是不能进行

全排序的 这样效率太低了.这个的实现方式实际上就是设置reduceTask的个数是1就可以了 这样就会只出现一个结果文件 并且是经过排序的.

hadoopmap和reduce区别(大数据之-Hadoop3.xMapReduce排序概述)(17)

hadoopmap和reduce区别(大数据之-Hadoop3.xMapReduce排序概述)(18)

9.还有一种是辅助排序 就是说 当map方法执行以后 然后reduceTask 拉取了数据 然后进行

数据的归并排序 然后再进行一次这个辅助排序 这个是自定义的 可以做 可以不做 可以根据自己的

需求去做.

hadoopmap和reduce区别(大数据之-Hadoop3.xMapReduce排序概述)(19)

hadoopmap和reduce区别(大数据之-Hadoop3.xMapReduce排序概述)(20)

10. 还有一种是二次排序 就是说 可以自定义这个compareTo方法 这样的话 比如我们那个

统计手机号使用流量的例子 可以让他先按照手机号流量使用情况排序 然后再按照再按照 比如

手机使用流量的 上行流量排序 然后再按照 下行流量排序.

hadoopmap和reduce区别(大数据之-Hadoop3.xMapReduce排序概述)(21)

hadoopmap和reduce区别(大数据之-Hadoop3.xMapReduce排序概述)(22)

11.然后我们看看如何重写这个compareTo接口 可以看到把我们之前自定义的那个 存储流量情况的

FlowBean传入了.我们之前也说过 我们定义的 数据的key 必须是可排序的对吧.

hadoopmap和reduce区别(大数据之-Hadoop3.xMapReduce排序概述)(23)

hadoopmap和reduce区别(大数据之-Hadoop3.xMapReduce排序概述)(24)

12.然后我们需要继承这个WriteComparable接口.

下一节我们就是用WriteComparable接口 进行一次排序.​

猜您喜欢: