Welcome to aparke’s blog
Mapreduce经典案例之全局TopN
题目描述
统计求当日每个网站页面被访问次数最多的前几个
数据样例:
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处理逻辑:
1 先切分出需要的数据列第二列作为key。
2 一个reducetask可能会收到多组数据,它会调用一次reduce的方法,当它把所有的分组数据处理完成后,它会执行cleanup方法。
3 reduce执行后,先不去执行context.write()方法,先将数据缓存在可以排序的集合中,比如treemap和treeset以及arraylist这些中。
4 通过reduce的reducetask阶段的clenup实现控制指输出显示前topn的条数。
5 存在问题有且只能有一个reduceTask分区,才能控制前Topn,此时不在体现出hadoop的分布式计算优势,此处是适合小数据。 掌握cleanup方法
处理逻辑代码
Mapper类
package cn.aparke.mr.topn; |
Reducer类
package cn.aparke.mr.topn; |
Job提交类
package cn.aparke.mr.topn; |
PageTopnBean对象类
package cn.aparke.mr.topn; |