流量统计
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