哈希切割:
给一个超过100G大小的log file, log中存着IP地址, 设计算法找到出现次数最多的IP地址? 与上题条件相同,如何找到top K的IP?如何直接用Linux系统命令实现?
答:
哈希切割就是将一个大文件,利用哈希的原理,将其分为若干个小文件。相同的数据都被分到同一个文件里。例如有一个存放着100亿个整数的大文件,将其分为100个小文件。将每个数都模100,结果相同的数存放到一个文件里。因为相同的数模100的结果是一样的。
1.找到出现次数最多的IP地址:
Hash分桶法
• 将100G文件分成1000份,将每个IP地址映射到相应文件中:IPINT % 1000
• 在每个文件中分别求出最高频的IP,再合并 Hash分桶法:
• 使用Hash分桶法把数据分发到不同文件
• 各个文件分别统计Top K
• 最后Top K汇总
2.如何找到top K的IP:
建立一个小堆,通过比较来找。
3.用Linux系统命令实现:
假设top 10:
sort log_file | uniq -c | sort -nr k1,1 | head -10