Welcome to aparke’s blog
Mapreduce经典案例之全局倒序输出
题目描述
mapreduce实现 页面访问总次数的全局倒序排序
数据样例:
2017/07/28 qq.com/a
2017/07/28 qq.com/bx
2017/07/28 qq.com/by
2017/07/28 qq.com/by3
2017/07/28 qq.com/news
2017/07/28 sina.com/news/socail
2017/07/28 163.com/ac
2017/07/28 sina.com/news/socail处理逻辑:
通过两次的mapreduce实现
1.先同通过wordcount统计出每个页面的访问次数
2.将上次的结果作为这次的输入统计次数并实现排序
mapreduce程序内置了一个排序机制:
map worker 和reduce worker ,都会对数据按照key的大小来排序
所以最终的输出结果中,一定是按照key有顺序的结果
思路:
本案例中,就可以利用这个机制来实现需求:
1、先写一个mr程序,将每个页面的访问总次数统计出来
2、再写第二个mr程序:
map阶段: 读取第一个mr产生的结果文件,将每一条数据解析成一个java对象PageCountBean(封装着一个url和它的总次数),然后将这个对象作为key,null作为value返回
要点:这个java对象要实现WritableComparable接口,以让worker可以调用对象的compareTo方法来进行排序
reduce阶段:由于worker已经对收到的数据按照PageCountBean的compareTo方法排了序,所以,在reduce方法中,只要将数据输出即可,最后的结果自然是按总次数大小的有序结果
处理逻辑代码
对象PageCountBean类
package cn.aparke.mr.page.reverse; |
PageCountReverseSort
package cn.aparke.mr.page.reverse; |