有两个海量日志文件存储在hdfs上, 其中登陆日志格式:user,ip,time,oper(枚举值:1为上线,2为下线);访问日志格式为:ip,time,url,假设登陆日志中上下线信息完整,且同一上下线时间段内使用的ip唯一,计算访问日志中独立user(独立user就是用户名不同,例如:user1与user2是独立用户)数量最多的前10个url,用MapReduce实现。
思路:
1.将用户登陆信息整理为 ip-user-loginTime-logoutTime格式文件
2.通过IP将处理后的登陆日志与访问日志关联 ip-user-url
3.统计每个url的独立访问数 url_用户数
4.求出UV前10的url
程序源码:
链接:https://pan.baidu.com/s/1AspEv9GcwIdmxkjFRytIMQ
提取码:r1ah
解释:
1.执行TopJob,得到:
192.168.1.11, lala, 2017-11-20 11:01, 2017-11-20 11:30
192.168.1.11, tom, 2017-11-20 10:00, 2017-11-20 11:00
.........
2.执行VisitJob, 以1中结果,和 visit.log 在reducer中进行join,得到:
192.168.1.11, tom,url1
192.168.1.11, tom,url2
........
3.执行 TopJob,获得每个url对应的用户个数:
url1 4
url2 3
url3 2
4.执行TopN, 获取排名,这里排出前两个:
url1 4
url2 3