如何從海量日誌中提取訪問最多的10個IP

算法思想:分而治之+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。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章