哈希分治法 - 統(tǒng)計海量數(shù)據(jù)中出現(xiàn)次數(shù)最多的前10個IP

場景

這是一個 ip 地址 127.0.0.1
假設(shè)有100億個這樣的 ip 地址存在文件中
這個文件大小大約是 100GB
問題:要統(tǒng)計出100億個 ip 中,重復(fù)出現(xiàn)次數(shù)最多的前10個

分析

100GB 幾乎不可能一次加載進內(nèi)存進行操作蝎土,所以必須要拆分
那么可以利用分治的思想视哑,把規(guī)模大的問題化小,然后解決各個小的問題誊涯,最后得出結(jié)果挡毅。

實現(xiàn)思路

  • ipv4 地址是一個 32 位的整數(shù),可以用 uint 保存暴构。
  • 我先設(shè)計一個哈希函數(shù)跪呈,把100個G的文件分成10000份,每份大約是 10MB取逾,可以加載進內(nèi)存了耗绿。

例如:我設(shè)計一個簡單的哈希函數(shù)是 f(ip) = ip % 10000,(ip 是個32位整數(shù))
那么 5 % 10000 = 5砾隅,不管 5 在哪個地方 5 % 10000 的結(jié)果都是 5缭乘,這就保證了相同的 ip 會被放在同一個子文件中,方便統(tǒng)計琉用,相同的元素經(jīng)過同一個哈希函數(shù)堕绩,得出的哈希值是一樣的。
那么我把100億個 ip邑时,都進行 ip % 10000 的操作奴紧,就完成了 100GB 文件分解成 10000個子文件的任務(wù)了。當(dāng)然實際中哈希函數(shù)的選取很重要晶丘,盡量使得元素分布均勻黍氮,哈希沖突少的函數(shù)才是最好的唐含。

記住,我把上面這個分解的過程叫做 Map沫浆,由一臺叫 master 的計算機完成這個工作捷枯。

  • 10MB 的小文件加進內(nèi)存,統(tǒng)計出出現(xiàn)次數(shù)最多的那個ip

10MB 的小文件里面存著很多 ip专执,他們雖然是亂序的淮捆,但是相同的 ip 會映射到同一個文件中來!
那么可以用二叉樹統(tǒng)計出現(xiàn)次數(shù)本股,二叉樹節(jié)點保存(ip, count)的信息攀痊,把所有 ip 插入到二叉樹中,如果這個 ip 不存在拄显,那么新建一個節(jié)點, count 標記 1苟径,如果有,那么把 count++躬审,最終遍歷一遍樹棘街,就能找出 count 最大的 ip 了。

我把這個過程叫做 Reduce承边,由很多臺叫 worker 的計算機來完成蹬碧。
每個 worker 至少要找出最大的前10個 ip 返回給 master,master 最后會收集到 10000 * 10 個 ip炒刁,大約 400KB恩沽,然后再找出最大的前 10 個 ip 就可以了。
最簡單的遍歷10遍翔始,每次拿個最大值出來就可以了罗心,或者用快速排序,堆排序城瞎,歸并排序等等方法渤闷,找出最大前 k 個數(shù)也行。

MapReduce

我剛剛除了介紹了一種海量數(shù)據(jù)的哈希分治算法之外脖镀,還穿插了一個谷歌的 MapReduce 分布式并行編程模型飒箭,原理就是上面說的那些了,有興趣的可以去詳細了解蜒灰。

哈希函數(shù)是什么弦蹂?哈希函數(shù)是把大空間的元素映射到一個小空間里。

說完了原理强窖,我已經(jīng)根據(jù)上面的原理寫了一個實驗程序凸椿,有興趣的可以去看看,地址在 這里
可以下載來看翅溺,代碼是C++的脑漫,vs2008 編譯環(huán)境髓抑。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市优幸,隨后出現(xiàn)的幾起案子吨拍,更是在濱河造成了極大的恐慌,老刑警劉巖网杆,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件羹饰,死亡現(xiàn)場離奇詭異,居然都是意外死亡跛璧,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門新啼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來追城,“玉大人,你說我怎么就攤上這事燥撞∽” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵物舒,是天一觀的道長色洞。 經(jīng)常有香客問我,道長冠胯,這世上最難降的妖魔是什么火诸? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮荠察,結(jié)果婚禮上置蜀,老公的妹妹穿的比我還像新娘。我一直安慰自己悉盆,他們只是感情好盯荤,可當(dāng)我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著焕盟,像睡著了一般秋秤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上脚翘,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天灼卢,我揣著相機與錄音,去河邊找鬼来农。 笑死芥玉,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的备图。 我是一名探鬼主播灿巧,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼赶袄,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了抠藕?” 一聲冷哼從身側(cè)響起饿肺,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎盾似,沒想到半個月后敬辣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡零院,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年溉跃,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片告抄。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡撰茎,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出打洼,到底是詐尸還是另有隱情龄糊,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布募疮,位于F島的核電站炫惩,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏阿浓。R本人自食惡果不足惜他嚷,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望芭毙。 院中可真熱鬧爸舒,春花似錦、人聲如沸稿蹲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽苛聘。三九已至涂炎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間设哗,已是汗流浹背唱捣。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留网梢,地道東北人震缭。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像战虏,于是被迫代替她去往敵國和親拣宰。 傳聞我的和親對象是個殘疾皇子党涕,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容

  • 教你如何迅速秒殺掉:99%的海量數(shù)據(jù)處理面試題 本文經(jīng)過大量細致的優(yōu)化后,收錄于我的新書《編程之法》第六章中巡社,新書...
    Helen_Cat閱讀 7,403評論 1 39
  • 摘要:本文將向您講述諸多數(shù)據(jù)處理面試題以及方法的總結(jié)膛堤。 第一部分、十道海量數(shù)據(jù)處理面試題 1晌该、海量日志數(shù)據(jù)肥荔,提取出...
    拾壹北閱讀 1,692評論 0 28
  • 1、題目:每一個ip訪問百度朝群,其ip地址都會被記錄到后臺日志文件中燕耿,假設(shè)一天的訪問日志有100G,求出一天中訪問百...
    山的那邊是什么_閱讀 2,029評論 0 4
  • 桑巴坐上飛機姜胖,又去了26個小時前誉帅。 桑巴看到了一些長相如何黑魔王臉型一樣的小星星后。氣憤而又得意的說:“你別得意谭期,...
    家赫閱讀 494評論 0 1
  • 一堵第、愛的表達 二吧凉、接納感受練習(xí) 三隧出、焦點訓(xùn)練 女兒提到學(xué)習(xí)就惱火,看來阀捅,她是很在意學(xué)習(xí)的胀瞪,不然就無所謂了。 四饲鄙、欣...
    媽媽隨筆閱讀 146評論 0 0