算法思想:分而治之+Hash
1、IP地址最多有2^32=4G種取值情況,所以不能完全加載到內存中處理;
2、可以考慮採用分而治之的思想,按照IP地址的Hash(IP) % 1024的值,把海量IP日誌分別存儲到1024個小文件中,這樣,每個小文件最多包含4MB個IP地址;
這裏解釋一下爲什麼用Hash(IP) % 1024值,如果不用,而直接分類的話,可能會出現這樣一種情況,就是有個IP在每個小文件中都存在,而且這個IP並不一定在那個小文件中是數量最多的,那麼最終可能選擇的結果會有問題,所以這裏用了Hash(IP)%1024值,這樣的話,通過計算IP的Hash值,相同IP肯定會放到一個文件中,當然不同的IP的Hash值也可能相同,就存在一個小文件中。
3、對於每一個小文件,可以構建一個IP爲key,出現的次數爲value的Hash Map,同時記錄當前出現次數最多的那個IP地址;
4、可以得到1024個小文件中的出現次數最多的那個IP,再依據常規的排序算法得出總體上出現次數最多的IP。