算法:海量日誌數據,提取出某日訪問百度次數最多的那個IP


      首先是這一天,並且是訪問百度的日誌中的IP取出來,逐個寫入到一個大文件中。注意到IP是32位的,最多有個2^32個IP。同樣可以採用映射的方法,比如模1000,把整個大文件映射爲1000個小文件,再找出每個小文中出現頻率最大的IP(可以採用hash_map進行頻率統計,然後再找出頻率最大的幾個)及相應的頻率。然後再在這1000個最大的IP中,找出那個頻率最大的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。



發佈了146 篇原創文章 · 獲贊 37 · 訪問量 93萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章