一、目的
针对海量日志数据,提取出某日访问买票网站次数最多的那个IP。(本实验主要是测试学生在数据不能一次载入内存时,如何达到目的)
二、思路
思路1: 首先是这一天,并且是访问买票网站的日志中的IP取出来,逐个写入到一个大文件中。注意到IP是32位的,最多有个2^32个IP。同样可以采用映射的方法,比如模1000,把整个大文件映射为1000个小文件,再找出每个小文中出现频率最大的IP(可以采用hash_map进行频率统计,然后再找出频率最大的几个)及相应的频率。然后再在这1000个最大的IP中,找出那个频率最大的IP,即为所求。
思路2:
1.IP地址最多有2^32=4G种取值情况,所以不能完全加载到内存中处理;
2.可以考虑采用“分而治之”的思想,按照IP地址的Hash(IP)%1024值,把海量IP日志分别存储到1024个小文件中。这样,每个小文件最多包含4MB个IP地址;
3.对于每一个小文件,可以构建一个IP为key,出现次数为value的Hash map,同时记录当前出现次数最多的那个IP地址;
4.可以得到1024个小文件中的出现次数最多的IP,再依据常规的排序算法得到总体上出现次数最多的IP;
三、实验内容
针对海量日志数据,提取出某日访问买票网站次数最多的那个IP。上面是两个典型的思路,可以作为参考。你也可以使用自己的思路进行问题的解决。
请实现以下功能:
1.编程模拟生成访问日志(想象你是网站管理者,你应该如何记录网站访问日志?日志应该保留哪些关键信息?提示:访问者的IP地址、时间肯定是需要的。同时为了测试“大数据功能”,请确保数据量不能太少,例如,整体数据量不能少于4G)。
2.(提取访问次数最多的IP)。
四、实验过程原始数据记录
////main.cpp
using namespace std;
#include<random
#include<iostream
#include <fstream
#include <sstream
#include<unordered_map
#include<algorithm
#
unordered_map 大量数据频率统计
最新推荐文章于 2025-05-07 12:58:49 发布