前言

这道题目网上到处都是,但是好多都没有讲清楚,然后大家又相互转载,错误泛滥,现在我来完善这道题目。

题目:每一个ip访问百度,其ip地址都会被记录到后台日志文件中,假设一天的访问日志有100G,求出一天中访问百度次数最多的ip地址,可以使用的内存大小是1G。

分析

  1. 首先解决大文件问题,也就是如何处理100G的一个大文件,这个通常的解决方法就是将大文件分解成许多小文件。我们可以通过对IP地址求hash然后对1024取模将一个100G的大文件分解成1024个小文件(file0,file1......file1023),注意这里的1024个文件并不是平均分的,也就是每个文件大小并不是(100G/1204)。当然我们考虑的时候可以假设文件是平均分的,那么每个文件大小为100M,这样一个100M的文件是可以全部读入大小为1G内存中。这样就解决了第一个文件太大不能一次读入内存的问题。
  2. 考虑到ip地址是32为,那么总共有2^32=4G种可能出现的ip地址,每个ip地址出现的次数不确定,这个具体是由100G大文件决定的。对每个小文件进行处理,我们知道前面每个文件中的ip是通过hash(ip)%1024。这样相当于将2^32=4G种ip地址进行了分段,每个文件中可能出现的ip最大范围是4G/1024=4M。创建一个hashmap,读取小文件中的每个ip地址,判断hashmap中是否有这个ip,如果没有,这往haspmap中插入一个<ip,1>的键值对,即hashmap.put(ip,1);如果haspmap中已经存在了这个ip,那么求出这个ip所对应的值count=haspmap.get(ip),然后往修改这个ip所对应的value,使其数量增加1,即hashmap.set(ip,count+1)。
  3. 当我们求出每个文件中出现次数最大的ip地址以后,我们在比较这1024个文件中的那个ip出现次数最大

伪代码实例

Mark for future referencehash(IP)%N get many small filesint max = 0;
String maxip = null;
for each fileHashmap hashmap;String IP = readIP(file);if(hashmap.has(IP)) {int cnt = hashmap.get(IP);hashmap.set(IP, cnt+1);if(cnt+1 > max) { max = cnt+1;maxip = IP;}}else hashmap.put(IP, 1);

百度面试题:从海量日志中提取访问百度次数最多的IP相关推荐

  1. Spark 加强版WordCount ,统计日志中文件访问数量

    原文地址:http://blog.csdn.net/whzhaochao/article/details/72416956 写在前面 学习Scala和Spark基本语法比较枯燥无味,搞搞简单的实际运用 ...

  2. 剑指Offer(第二版)面试题56:数组中数字出现的次数

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/73609133冷血之心的博客) 剑指Offer(第二版)面试题56: ...

  3. 从1亿个ip中找出访问次数最多的IP

    看了教你如何迅速秒杀掉:99%的海量数据处理面试题一文,的确是挺有收获的,特别是对这种海量数据的处理,的确是有了一个挺清晰的思路,特别感谢原文博主July. 处理海量数据问题存在的原因就在于1)数据量 ...

  4. 求一个字符串中连续出现的次数最多的子串

    求一个字符串中连续出现的次数最多的子串.例如字符串"abababc",最多连续出现的为ab,连续出现三次.要和求一个字符串中的最长重复子串区分开来,还是上面的字符串,那么最长的重复 ...

  5. 使用java,计算一段文本中出现英语单词次数最多的单词

    package cn.rrl.interview;import java.util.ArrayList; import java.util.Collections; import java.util. ...

  6. hadoop学习-海量日志分析(提取KPI指标)

    1.Web日志分析 从Web日志中,我们可以获取网站各类页面的PV值(PageView,页面访问量),访问IP:或者是用户停留时间最长的页面等等,更复杂的,可以分析用户行为特征. 在Web日志中,每条 ...

  7. Zabbix监控之检测程序日志中错误发生的次数

    最近开发人员提了一个新的监控需求,当一个日志文件中出现的错误的次数增加时(日志文件中的错误关键字出现数量增加)则触发报警. 我觉得这是一个无聊的问题,问题之所以无聊,是因为该问题本身就具有局限性(自己 ...

  8. 【Python常见面试题】统计字符串中 n 的出现次数

    # 统计字符串中 n 的出现次数: strtemp='ab2b3n5n2n67mm4n2' print(strtemp.count('n'))

  9. js判断字符串中某个字母出现次数最多

    2019独角兽企业重金招聘Python工程师标准>>> //把字符串保存到空对象中,再遍历对象 var st = 'abacafaafdsaffweadafweafaeadafaes ...

  10. java出现次数最多的字母_关于Java:查找字母中每个字母出现次数最多的单词

    我编写了一个程序来读取文本文件,其中每一行都是一个单词. 代码的第一部分找到以字母的每个字母开头的最长单词,并将其存储在数组中. 我希望程序执行的第二部分是为字母表中的每个字母找到该字母出现次数最多的 ...

最新文章

  1. 设计模式六大原则(5):迪米特法则
  2. 蓝桥杯 密文搜索(全排列)
  3. android 自定义textview 垂直滚动,Android中TextView如何实现水平和垂直滚动
  4. 数据清洗最基础的10个问题,基本涵盖目前常见的数分场景!
  5. Linux 中 awk命令应用
  6. Spring Data Redis—Pub/Sub(附Web项目源码)
  7. WPF 读取Docx文件并显示(附下载链接)
  8. c++ maps使用
  9. enum是java关键字吗_enum是java关键字吗?
  10. iOS 四种延时的方法
  11. Spring(26)——PathMatchingResourcePatternResolver
  12. 1.54寸墨水屏驱动板原理图+PCB
  13. Python 温度转换
  14. 林子雨大数据实验八Flink部分代码
  15. 基于SGIP协议的短信网关接口
  16. 鸟枪换炮,利用python3对球员做大数据降维(因子分析得分),为C罗找到合格僚机
  17. Kotlin Sealed Class
  18. ae计算机配置要求,AE和PR要求电脑的最低配置分别是?
  19. 工作这两年的经验与教训
  20. Jmeter 的 vars 和 props 用法

热门文章

  1. 《剑指offer》面试题30——最小的k 个数
  2. python基本数据类型——整型,浮点型,复数,字符串
  3. HTML学习总结(3)——Audio/Video
  4. 计算机网络-01-计算机网络体系结构
  5. SSH项目搭建-03-DAO层,Controller层创建及代码抽取
  6. Nested组件,解决Flutter布局嵌套过深的利器
  7. java线程知识点拾遗(1)
  8. Google Exoplayer之全面认识
  9. java集成agent作用_javaagent 基于 javaagent 开发的 APM 工具,收集方法的执行次数和执行时间,定时输出成 json 格式 @codeKK Android开源站...
  10. linux apt get 无效,kail Linux apt-get失败解决方案