海量日志数据,提取出某日访问百度次数最多的那个IP

问题:一个的日志文件中存放IP地址,按照访问量对IP地址取访问量最大的IP,内存大小4M

解答:

1.由于内存大小的限制,分而治之

2.IP地址,0.0.0.0 ~ 255.255.255.255 ,

255(10) = 11111111(2)
共 4*8 = 32 bit 表示一个IP地址
每位上共两种变化,所以共 2^32 个不同的IP地址

拆分为1024文件
2^32 / 2^10 = 2^22 = 4M,每份文件中最多存放4M个不同的IP地址

3.计算IP地址的HASH值

IP.hash % 1024 ,让IP地址落在不同的文件中

计算Hash值再取余,
类比HashMap ,
二次计算Hash值,即将key的hashCode 再进行计算,
是因为

4.在1024个小文件中,计算当前文件中的访问量最高的IP地址,可以使用HashMap的形式

5.再从得出的1024个结果中,选取访问量最高的IP地址

6.使用Hash(IP)%1024的原因
直接分配:即将大文件拆分成1024个小文件,平均分配,按照顺序依次将IP地址放入不同的文件中;缺点,大文件中IP地址是按照实际应用中的顺序存放的,可能存放在分配到不同的文件后,每个文件中都有相同的IP地址;而这些在不同文件中相同的IP地址,又可能不是改文件中数量最多的IP地址;
散列分配:能够保证把相同的IP地址分配到同一个文件中,不会出现统计遗漏的问题或混淆

博文参考:

[url=http://blog.csdn.net/winshining/article/details/72477642]如何从海量日志中提取访问最多的10个IP[/url]
[url=https://mp.weixin.qq.com/s/CM9vqLiyFtgDK51T9YZfKA]10道Hadoop面试真题及解题思路[/url]
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值