18mapreduce的案例加强——好程序

流量统计
1363157985066     13726230503    00-FD-07-A4-72-B8:CMCC    120.196.100.82    i02.c.aliimg.com      24    27    2481    24681    200
1363157995052     13826544101    5C-0E-8B-C7-F1-E0:CMCC    120.197.40.4            4   0    264    0    200

1、对流量日志中的用户统计总上、下行、总流量

主要考虑的是map和reduce。
map端的输入是不用考虑的,都是以文本的形式输入行。map考虑的是输出,数据以什么样去处理比较好。

reduce端的输入是迭代器,得知道输入的迭代器是什么,数据还是要考虑的,以什么样的规则将数据传递给reduce,这是reduce调用的规则,要考虑框架的规则。输出的key是什么,输出的value是什么

一个手机号表示一个用户,key就是手机号

mapreduce
map
输入
输出:
key:phonenum
value:flowBean(上、下行、总流量) 作为一个整体
数据:(用什么样的数据进行处理)

reduce
输入:
key:phonenum
value:flowBean(上、下行、总流量)作为一个整体
it
输出:
key:phonenum
value:flowBean(上、下行、总流量)作为一个整体
up:down:total

到此,JavaBean就OK了。

接下来就要写MapReduce(map端一次只处理一行数据

13480253104    180    180    360
13502468823    7335    110349    117684
13560436666    1116    954    2070
13560439658    2034    5892    7926
13602846565    1938    2910    4848

reduce端的输入是要什么数据,才能得出reduce端所要输出的内容

统计流量且按照流量大小倒序排序(总量倒序、下行、上行倒序,phoneNum正序)  要统计还要倒叙
mapreduce
map
输入
key:
value:13480253104    180    180    360
输出:
key:flowBean
value:phonenum
数据:

reduce
输入:
key:flowBean
value:phonenum
it
输出:
key:phonenum
value:flowBean(上、下行、总流量)
up:down:total

到此flowBean改完了

到此map端改完了

reduce端

自定义分区

3、统计流量且按照手机号的归属地,将结果数据输出到不同的省份文件中
134 江西0
135 北京1
136 上海2
137 天津3
138 重庆4
139 深圳5
其他  其他


map阶段
输出:
key:
value:

reducetask:7

reduce:
输入:
key:
value:
输出:
key:phonenum
value:flowBean

分组Top1的实现


TOP 1

<Order_0000001,Pdt_01,222.8>
<Order_0000001,Pdt_05,25.8 >
<Order_0000002,Pdt_05,325.8>
<Order_0000002,Pdt_03,522.8>
<Order_0000002,Pdt_04,122.4>
<Order_0000003,Pdt_01,222.8>

到此Javabean实现了。比普通类多实现序列化方法,比较方法。

---------=======----======-

------------------------

topn的设置

初始化清空资源
setup

reduce
reduce
reduce
.....

cleanup

发布了204 篇原创文章 · 获赞 16 · 访问量 19万+

猜你喜欢

转载自blog.csdn.net/penghao_1/article/details/104440235