如何用MapReduce实现分组累计再排序?

lbllbl 2013-10-25 12:18:57
我要统计最近一个月的下载Log记录,找出被下载最多的软件。要怎么处理?
Log记录主要含有以下信息:下载日期,软件Id(整数)
我现在的处理要运行2次MapReduce:
第1个MapReduce,按软件Id分组,输出 “软件Id + 下载次数” 到文件DownloadTop
第2个MapReduce,处理文件DownloadTop,按“下载次数”排序,输出最终文件
能不能一次性完成?
...全文
610 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lbllbl 2013-11-12
  • 打赏
  • 举报
回复
虽然问题没解决,但大家的回答帮我做出了决定,放弃一次完成的想法。 谢谢大家回答。
zhrs110 2013-11-05
  • 打赏
  • 举报
回复
引用 5 楼 zhrs110 的回复:
一次可以,自定义一个数据类型作为输出key,该类有两个属性,firstKey是下载次数,secondKey是软件ID,重写compare方法,输出的结果就是排好序的
经实验,不行。。。
zhrs110 2013-11-04
  • 打赏
  • 举报
回复
一次可以,自定义一个数据类型作为输出key,该类有两个属性,firstKey是下载次数,secondKey是软件ID,重写compare方法,输出的结果就是排好序的
幸运小侯子 2013-10-31
  • 打赏
  • 举报
回复
一次性完不成,reduce 输出不排序的,你要运算count后,直接排序肯定做不到,必须得二次了。
少主无翼 2013-10-28
  • 打赏
  • 举报
回复
理解错了 貌似是得需要两个job
少主无翼 2013-10-28
  • 打赏
  • 举报
回复
一个reduce 软件下载量作为key 软件名作为value 应该可以吧; 或者自定义一个封装软件和下载量的类,需实现WritableComparable接口,将他作为key,value可以用NullWritable,然后在自定义一个comparator类,需实现RawComparator接口,用于对key进行排序,排序时只根据下载量排序,即可实现
撸大湿 2013-10-25
  • 打赏
  • 举报
回复
如果用MR计算框架的话,必须两个MR才能解决
一个汇总MR
一个排序MR

但是,如果DownloadTop结果数据文件比较小
可以用MR+HDFS API解决
一个汇总MR
DownloadTop输出后,用HDFS API把DownloadTop读出来排序,性能比MR要高很多,但前提是DownloadTop足够小,比如几百MB

20,809

社区成员

发帖
与我相关
我的任务
社区描述
Hadoop生态大数据交流社区,致力于有Hadoop,hive,Spark,Hbase,Flink,ClickHouse,Kafka,数据仓库,大数据集群运维技术分享和交流等。致力于收集优质的博客
社区管理员
  • 分布式计算/Hadoop社区
  • 涤生大数据
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧