问题:
海量日志数据,提取出某日访问百度次数最多的那个IP?
解答:
IP地址有32位,故最多有2^32=4G种取值,再加上每种取值或许有重复的情况,所以最坏情况下内存完全不能全部处理,故采取“分而治之”的思想。
(1)“哈希分块”:顺序读取文件,采用哈希算法,Hash(IP)%1024,将每个IP分配至1024个小文件,每个文件占2^32/2^10=2^22=4M,4M内存完全可以。
(2)“哈希统计”:用HashMap统计每份文件中IP出现的次数,再用常规排序算法,得出最多的一个IP地址。(1024份小文件用的是同一个Hash表统计的)