分布式計(jì)算的基礎(chǔ):MapReduce

MapReduce

?Y:?ch如果提出這么一個(gè)需求:分析2.6TB的數(shù)據(jù),找出其中最熱的10個(gè)人名。這個(gè)需求看起來(lái)很簡(jiǎn)單,無(wú)非就是先讀取文件,做一下分詞處理,找出其中的人名,再累加計(jì)數(shù),最后得出計(jì)數(shù)最多的人名。可是,這里有2.6TB的數(shù)據(jù)誒,如果處理速度是1MB/s,那么也得算個(gè)31.5天,等到那個(gè)時(shí)候,也許產(chǎn)品經(jīng)理已經(jīng)忘記了這個(gè)需求:)

為了不讓產(chǎn)品經(jīng)理忘記這個(gè)需求,那我們得加快處理速度了,一臺(tái)機(jī)器處理不過(guò)來(lái),那我們就堆機(jī)器吧,上個(gè)100臺(tái)機(jī)器,總能在一天之內(nèi)搞定吧。那么面對(duì)這100臺(tái)機(jī)器,該如何分配任務(wù),以及如何收集處理結(jié)果呢?這程序該怎么寫(xiě)呢?這就祭出今天要說(shuō)的MapReduce了。

MapReduce是由Google提出的一個(gè)分布式計(jì)算模型,簡(jiǎn)單的說(shuō),就是把大量的數(shù)據(jù)分解成獨(dú)立的單元執(zhí)行(Map),然后將結(jié)果歸并在一起(Reduce)。

面對(duì)上面的需求,首先需要做的事將任務(wù)分解了(Map)??梢杂羞@樣的一個(gè)獨(dú)立的小任務(wù),以單個(gè)文件作為一個(gè)輸入,然后經(jīng)過(guò)分詞、人名篩選等處理后,得到很多Key-Value形式的鍵值對(duì),這里的Key就是某個(gè)人名(張三),Value就是張三在這個(gè)文件中出現(xiàn)的次數(shù)。這種獨(dú)立小任務(wù)的處理方式,對(duì)于2.6TB中的文件都是一模一樣的,那么我們就把這些文件統(tǒng)統(tǒng)分配到其中90臺(tái)機(jī)器上去單獨(dú)執(zhí)行這些小任務(wù)就好了。

另外10臺(tái)機(jī)器干嘛呢?它們就負(fù)責(zé)Reduce,將計(jì)算結(jié)果歸并起來(lái),當(dāng)前面90臺(tái)機(jī)器處理完一個(gè)文件了,它就將處理結(jié)果扔給這10臺(tái)機(jī)器。扔結(jié)果可不是亂扔掉哦,它有一個(gè)原則,相同Key的結(jié)果都往同一臺(tái)機(jī)器上扔,如下圖中畫(huà)的那樣,藍(lán)色的處理結(jié)果,都扔給了第一臺(tái)機(jī)器,這樣它就保證了同一個(gè)Key的數(shù)據(jù)完整性。

? ? ? ? ??
信息處理示意圖

最終,從全部Reduce的機(jī)器上,可以獲得每個(gè)名字在這2.6TB數(shù)據(jù)中出現(xiàn)的統(tǒng)計(jì)結(jié)果,將其中次數(shù)最多的前10個(gè)列出來(lái),就得到了我們想要的結(jié)果了。

說(shuō)到底就是將大量重復(fù)獨(dú)立的任務(wù),分?jǐn)偟讲煌臋C(jī)器上去執(zhí)行,分擔(dān)了整體運(yùn)行的時(shí)間。


文章來(lái)源:微信號(hào):給產(chǎn)品經(jīng)理講技術(shù)

文章作者:凡夫畏果

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容