大數(shù)據(jù)面試 | 03 通過實(shí)例思考MR1.0 工作流程--單詞統(tǒng)計(jì)

目錄

input split

map

shuffle

reduce

架構(gòu)設(shè)計(jì)

一個(gè)單詞統(tǒng)計(jì)的例子引入


單詞統(tǒng)計(jì).png

input split

在進(jìn)行map計(jì)算之前术陶,mapreduce會(huì)根據(jù)輸入文件計(jì)算輸入分片(input split)梧宫,每個(gè)輸入分片(input split)針對(duì)一個(gè)map任務(wù)塘匣,輸入分片(input split)存儲(chǔ)的并非數(shù)據(jù)本身兆解,而是一個(gè)分片長(zhǎng)度和一個(gè)記錄數(shù)據(jù)的位置的數(shù)組

輸入分片(input split)往往和hdfs的block(塊)關(guān)系很密切锅睛,假如我們?cè)O(shè)定hdfs的塊的大小是64mb历谍,如果我們輸入有三個(gè)文件望侈,大小分別是3mb勋桶、65mb和127mb例驹,那么mapreduce會(huì)把3mb文件分為一個(gè)輸入分片(input split),65mb則是兩個(gè)輸入分片(input split)而127mb也是兩個(gè)輸入分片(input split)鹃锈,

換句話說(shuō)我們?nèi)绻?strong>在map計(jì)算前做輸入分片調(diào)整屎债,例如合并小文件盆驹,那么就不會(huì)有5個(gè)map任務(wù)將執(zhí)行,而且每個(gè)map執(zhí)行的數(shù)據(jù)大小不均辫封,這個(gè)也是mapreduce優(yōu)化計(jì)算的一個(gè)關(guān)鍵點(diǎn)玖瘸。

map

就是編寫好的map函數(shù)雅倒,因此map函數(shù)效率相對(duì)好控制弧可,而且一般map操作都是本地化操作也就是在數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)上進(jìn)行

shuffle

Shuffler.png

Shuffle.png
  • map在做輸出時(shí)候會(huì)在內(nèi)存里開啟一個(gè)環(huán)形內(nèi)存緩沖區(qū)裁良,這個(gè)緩沖區(qū)專門用來(lái)輸出的校套,默認(rèn)100MB笛匙,當(dāng)數(shù)據(jù)達(dá)到一定閾值就會(huì)把內(nèi)容寫到磁盤上犀变,這個(gè)過程叫spill获枝,這個(gè)閾值一般是0.8骇笔,也就是80MB笨触,另外的20%內(nèi)存可以繼續(xù)寫入要寫進(jìn)磁盤的數(shù)據(jù),寫入磁盤和寫入內(nèi)存操作是互不干擾的*谎脯,如果緩存區(qū)被撐滿了持寄,那么map就會(huì)阻塞寫入內(nèi)存的操作,讓寫入磁盤操作完成后再繼續(xù)執(zhí)行寫入內(nèi)存操作废麻。

  • Partitioner模庐,將map輸出數(shù)據(jù)到本地磁盤過程中進(jìn)行分區(qū)操作掂碱,目的是將reduce對(duì)應(yīng)起來(lái),一個(gè)Partitioner對(duì)應(yīng)一個(gè)reduce作業(yè)沧卢,同時(shí)還對(duì)其進(jìn)行對(duì)key值排序sort但狭。簡(jiǎn)單理解就是按照統(tǒng)計(jì)結(jié)果按照條件輸入到不同文件當(dāng)中(分區(qū))撬即。比如將手機(jī)號(hào)按照 135 137 187開頭的分別放到一個(gè)獨(dú)立的文件當(dāng)中 ,其他的放到一個(gè)文件夾唱歧。

  • 如果我們定義了combiner函數(shù)颅崩,那么排序前還會(huì)執(zhí)行combiner操作。combiner階段是程序員可以選擇的挨摸,combiner其實(shí)也是一種reduce操作得运,因此我們看見WordCount類里是用reduce進(jìn)行加載的熔掺。Combiner主要是在map計(jì)算出中間文件前做一個(gè)簡(jiǎn)單的合并重復(fù)key值的操作。
    例如我們對(duì)文件里的單詞頻率做統(tǒng)計(jì)推沸,map計(jì)算時(shí)候如果碰到一個(gè)hadoop的單詞就會(huì)記錄為1鬓催,但是這篇文章里hadoop可能會(huì)出現(xiàn)n多次宇驾,那么map輸出文件冗余就會(huì)很多猴伶,因此在reduce計(jì)算前對(duì)相同的key做一個(gè)合并操作,那么文件會(huì)變小筝尾,這樣就提高了寬帶的傳輸效率筹淫,畢竟hadoop計(jì)算力寬帶資源往往是計(jì)算的瓶頸也是最為寶貴的資源崔挖。
    但是combiner操作是有風(fēng)險(xiǎn)的狸相,使用它的原則是combiner的輸入不會(huì)影響到reduce計(jì)算的最終輸入捐川,例如:如果計(jì)算只是求總數(shù)古沥,最大值娇跟,最小值可以使用combiner苞俘,但是做平均值計(jì)算使用combiner的話吃谣,最終的reduce計(jì)算結(jié)果就會(huì)出錯(cuò)做裙。

  • 合并merge锚贱,對(duì)于spill產(chǎn)生的許多小文件進(jìn)行分區(qū)排序合并成大文件拧廊,存放在Map Task運(yùn)行的機(jī)器的本地磁盤,臨時(shí)緩存job結(jié)束會(huì)刪除耐量。

  • 拷貝copy廊蜒,將Map Task運(yùn)行的機(jī)器上山叮,copy數(shù)據(jù)到Reduce Task機(jī)器上。

  • 合并merge添履,將從不同Map Task機(jī)器上的copy出來(lái)的數(shù)據(jù)進(jìn)行合并排序屁倔。

  • 分組group,將相同的Key的value放在一起

reduce

和map函數(shù)一樣也是程序員編寫的暮胧,最終結(jié)果是存儲(chǔ)在hdfs上的锐借。

MR1.0 運(yùn)行架構(gòu)

MR1.0 運(yùn)行架構(gòu).png

MapReduce1 的工作機(jī)制中,角色主要包括客戶端往衷, Jobtracker钞翔,Tasktracker
Jobtracker 主要是協(xié)調(diào)作業(yè)的運(yùn)行
Tasktracker 是負(fù)責(zé)運(yùn)行作業(yè)劃分之后的任務(wù)

JobTracker

  • 核心,主席舍,單點(diǎn)
  • 調(diào)度所有作業(yè)
  • 監(jiān)控整個(gè)集群的資源負(fù)載

Tasktracker

  • 從布轿,自身節(jié)點(diǎn)資源管理
  • 和JobTracker 匯報(bào)資源,獲取Task

MR1.0弊端

  • JobTracker 負(fù)載過重,存在單點(diǎn)故障
  • 不同框架對(duì)資源不能進(jìn)行全局管理

Client

  • 以作業(yè)為單位
  • 規(guī)劃作業(yè)計(jì)算分布
  • 提交作業(yè)資源到HDFS
  • 最終提交作業(yè)到JobTracker
Mapper計(jì)算框架.png
Reducer計(jì)算框架.png

MapReduce 過程(了解):

  1. 首先是由客戶端向 Jobtracker 請(qǐng)求一個(gè)新的作業(yè)萝毛,Jobtracker 會(huì)檢查作業(yè)的 輸出路徑是否存在笆包。若存在則拋出異常薯演。若不存在的話,Jobtracker 會(huì)向客戶端返回 job 相關(guān)資源的提交路徑以及 jobID衡创。

  2. 接下來(lái)就是客戶端會(huì)將 job 所需的資源(jar 文件,配置文件)交到共享文件系統(tǒng)。并告知 Jobtracker 已將 job 復(fù)制到共享文件系統(tǒng)椰苟,準(zhǔn)備執(zhí)行。

  3. Jobtracker 將提交的 Job 放入內(nèi)部的任務(wù)隊(duì)列,由作業(yè)調(diào)度器進(jìn)行調(diào)度赠潦,并進(jìn)行初始化(包括創(chuàng)建一個(gè)表示正在運(yùn)行作業(yè)的容器臭家,用于封裝任務(wù)和記錄信息)

  4. 之后 jobtracker 的作業(yè)調(diào)度器從共享文件系統(tǒng)獲取客戶端計(jì)算好的輸入切 片蹄殃,以創(chuàng)建任務(wù)運(yùn)行列表

  5. Tasktracker 通過心跳與 Jobtracker 保持通信,報(bào)告自己的狀態(tài)鸳谜,以及是否準(zhǔn) 備好運(yùn)行一個(gè) task,若準(zhǔn)備好 蝗肪,Jobtracker 則通過一定的調(diào)度算法從 Jobtracker 中獲得一個(gè) task 分配給 Tasktracker。

  6. Tasktracker 在共享文件系統(tǒng)中獲得任務(wù)相關(guān)資源,實(shí)現(xiàn) jar 本地化诱咏,并創(chuàng)建 響應(yīng)的文件夾以及一個(gè) taskrunner 運(yùn)行該任務(wù)。

  7. taskrunnr 會(huì)啟動(dòng)一個(gè)新的 JVM硕并,在新啟動(dòng)的 JVM 中運(yùn)行任務(wù)乙濒。

進(jìn)度與狀態(tài)的更新:有一個(gè)獨(dú)立的線程向 tasktracker 報(bào)告當(dāng)前任務(wù)狀態(tài)傻丝。同時(shí) Tasktracker 每隔 5s 向 Jobtracker 通過心跳發(fā)送狀態(tài)。JobTracker 將這些更新 合并泛释,發(fā)送給客戶端注竿。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末喂分,一起剝皮案震驚了整個(gè)濱河市甘萧,隨后出現(xiàn)的幾起案子酸钦,更是在濱河造成了極大的恐慌徒恋,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,640評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡魔眨,警方通過查閱死者的電腦和手機(jī)侄刽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 165,011評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵摩泪,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,755評(píng)論 1 294
  • 正文 為了忘掉前任计济,我火速辦了婚禮传藏,結(jié)果婚禮上叫惊,老公的妹妹穿的比我還像新娘霍狰。我一直安慰自己燎含,他們只是感情好屏箍,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,774評(píng)論 6 392
  • 文/花漫 我一把揭開白布钝诚。 她就那樣靜靜地躺著,像睡著了一般榄棵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瓢喉,一...
    開封第一講書人閱讀 51,610評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音遂跟,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛媒峡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,352評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了拆挥?” 一聲冷哼從身側(cè)響起汉矿,我...
    開封第一講書人閱讀 39,257評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體繁仁,經(jīng)...
    沈念sama閱讀 45,717評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡涉馅,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,894評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了黄虱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片稚矿。...
    茶點(diǎn)故事閱讀 40,021評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖捻浦,靈堂內(nèi)的尸體忽然破棺而出晤揣,到底是詐尸還是另有隱情,我是刑警寧澤默勾,帶...
    沈念sama閱讀 35,735評(píng)論 5 346
  • 正文 年R本政府宣布碉渡,位于F島的核電站,受9級(jí)特大地震影響母剥,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜形导,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,354評(píng)論 3 330
  • 文/蒙蒙 一环疼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧朵耕,春花似錦炫隶、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至处嫌,卻和暖如春栅贴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背熏迹。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工檐薯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,224評(píng)論 3 371
  • 正文 我出身青樓坛缕,卻偏偏與公主長(zhǎng)得像墓猎,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子赚楚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,974評(píng)論 2 355

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