MapReduce計(jì)算模型

在Hadoop中算利,用于執(zhí)行MapReduce任務(wù)的機(jī)器角色有兩個(gè):

  • JobTracker:用于調(diào)度工作的污筷,初始化作業(yè),分配作業(yè)桥氏,與TaskTracker進(jìn)行通信温峭,協(xié)調(diào)整個(gè)作業(yè)的執(zhí)行
  • TaskTracker:用于執(zhí)行工作的;保持與JobTracker的通信字支,在分配的數(shù)據(jù)片段上執(zhí)行map或reduce任務(wù)
  • HDFS:保存作業(yè)的數(shù)據(jù)凤藏,配置信息奸忽,保存作業(yè)結(jié)果
  • 客戶端:編寫mapreduce,配置作業(yè)揖庄,提交作業(yè)

一個(gè)Hadoop集群只有一個(gè)JobTracker.

MapReduce是一種編程模型栗菜,是一種編程方法。

  • 輸入一個(gè)大文件蹄梢,通過split之后疙筹,將其分為多個(gè)分片
  • 每個(gè)文件分片由單獨(dú)的機(jī)器去處理,這就是map方法
  • 將各個(gè)機(jī)器計(jì)算的結(jié)果進(jìn)行匯總并得到最終的結(jié)果禁炒,這就是reduce方法

input->split->map->shuffle->reduce->output

在Hadoop中而咆,每個(gè)MapReduce任務(wù)都被初始化為一個(gè)Job,每個(gè)Job又可以分為兩個(gè)階段:map階段和reduce階段,這兩個(gè)階段分別用兩個(gè)函數(shù)來表示幕袱,即map函數(shù)和reduce函數(shù)暴备,map函數(shù)接受一個(gè)<key,value>形式的輸入,然后同樣產(chǎn)生一個(gè)key-value形式的中間輸出们豌,Hadoop會(huì)負(fù)責(zé)將所有具有相同中間key值的value集合到一起傳遞給reduce函數(shù)涯捻,reduce函數(shù)接受一個(gè)如<key,(list of value)>的形式輸入,然后對(duì)這個(gè)value集合進(jìn)行處理玛痊,每個(gè)reduce產(chǎn)生0個(gè)或者1個(gè)輸出汰瘫,reduce的輸出結(jié)果也是key-value

在MR的標(biāo)準(zhǔn)模型中,reduce階段在map階段完成之前無法啟動(dòng)擂煞,而且在下載到reducer之前混弥,所有處理過程的中間數(shù)據(jù)都保存在磁盤中,所有這些都顯著增加了處理的延遲

shuffle

shuffle過程包含在map和reduce兩端对省,在Map端的shuffle過程是對(duì)map的結(jié)果進(jìn)行劃分partition,排序sort和分割spill,然后將屬于同一個(gè)劃分的輸出合并在一起merge,并寫在磁盤上蝗拿,同時(shí)按照不同的劃分將結(jié)果發(fā)送給對(duì)應(yīng)的reduce(map的輸出的劃分和reduce的對(duì)應(yīng)關(guān)系由JobTracker確定)。reduce端又會(huì)將各個(gè)map送來的屬于同一個(gè)劃分的輸出進(jìn)行合并蒿涎,然后對(duì)merge的結(jié)果進(jìn)行排序哀托,最后交給reduce處理

map端

map端的shuffle過程包含在collect函數(shù)對(duì)map輸出結(jié)果的處理過程中,

reduce端

reduce端shuffle階段可以分為三個(gè)階段:復(fù)制map輸出劳秋,排序合并仓手,reduce處理

舊API

map方法

map函數(shù)繼承于MapReduceBase,并且實(shí)現(xiàn)了Mapper接口,此接口是一個(gè)泛型類型玻淑,有4個(gè)形式的參數(shù)嗽冒,分別是

  1. 輸入key值類型
  2. 輸入value值類型
  3. 輸出Key值類型
  4. 輸出value值類型

reduce方法

reduce函數(shù)繼承于MapReduceBase,并且實(shí)現(xiàn)了Reducer接口补履,reduce函數(shù)是以map函數(shù)的輸出作為輸入

新API

  • 在新API中添坊,Mapper與Reducer已經(jīng)不是接口 而是抽象類,而且map函數(shù)和reduce函數(shù)已經(jīng)不再實(shí)現(xiàn)Mapper和Reducer接口箫锤,而是繼承贬蛙。
  • 廣泛使用context對(duì)象雨女,并使用MapContext進(jìn)行MapReduce之間的通信,MapContext同時(shí)充當(dāng)OutCollector和Reporter
    角色
  • Job的配置統(tǒng)一由configuration來完成阳准,不需要額外使用JobConf對(duì)守護(hù)進(jìn)程進(jìn)行配置
  • 由Job類來負(fù)責(zé)Job的控制氛堕,而不是JobClient,JobClient在新API中被刪除

數(shù)據(jù)流

數(shù)據(jù)首先按照TextInputFormat形式被處理成兩個(gè)InputSplit,然后輸入到兩個(gè)map中,map程序會(huì)讀取inputSplit指定位置的數(shù)據(jù)野蝇,然后按照設(shè)定的方式處理批數(shù)據(jù)岔擂,最后寫入本地磁盤中。注意浪耘,這里不是寫到hdfs上乱灵,因?yàn)閙ap的輸出在job完成之后即可刪除,因此不需要存儲(chǔ)在hdfs上七冲。但是由于網(wǎng)絡(luò)傳輸降低了mapreduce任務(wù)的執(zhí)行效率痛倚,因此map的輸出文件是寫在磁盤上的,如果map程序在沒有來得及將數(shù)據(jù)傳送到reduce就崩潰了澜躺,那么JobTracker只需要另外選取一臺(tái)機(jī)器重新執(zhí)行這個(gè)task就可以了蝉稳。

Reduce會(huì)讀取map的輸出數(shù)據(jù),合并Value,然后將他們輸出到hdfs上掘鄙,reduce的輸出會(huì)占用很多的網(wǎng)絡(luò)帶寬耘戚,不過這與上傳數(shù)據(jù)一樣,是不可避免的操漠。

在這收津,需要注意:

  • MapReduce在執(zhí)行過程中往往不止一個(gè)reduce task,reduce task的數(shù)量是可以通過程序指定的,當(dāng)存在多個(gè)reduce task時(shí)浊伙,每個(gè)reduce會(huì)收集一個(gè)或者多個(gè)key值撞秋,當(dāng)出現(xiàn)多個(gè)reduce task時(shí),每個(gè)reducetask都會(huì)生成一個(gè)輸出文件
  • 在沒有reduce任務(wù)時(shí)嚣鄙,系統(tǒng)會(huì)直接將map的輸出結(jié)果作為最終的結(jié)果吻贿,同時(shí)map task的數(shù)量可以看成是reduce task的數(shù)量,即有多少個(gè)maptask就有多少個(gè)輸出文件

MR任務(wù)優(yōu)化

MapReduce計(jì)算模型的優(yōu)化主要集中在兩個(gè)方面:計(jì)算性能方面的優(yōu)化哑子,IO操作方面的優(yōu)化

  1. 任務(wù)的調(diào)度
    計(jì)算方面舅列,hadoop總是優(yōu)先將任務(wù)分配給空閑的機(jī)器,使得所有的任務(wù)能公平分享資源卧蜓;IO方面帐要,hadoop盡量將Map任務(wù)分配給InputSplit的機(jī)器,減少網(wǎng)絡(luò)IO的消耗
  2. 數(shù)據(jù)預(yù)處理與InputSplit的大小
    MR任務(wù)擅長(zhǎng)處理少量的大數(shù)據(jù)烦却,不擅長(zhǎng)大量的小數(shù)據(jù)宠叼,因此可以通過設(shè)置map的輸入數(shù)據(jù)大小來調(diào)整map運(yùn)行時(shí)間先巴,可以設(shè)置塊block的大小其爵,也可以設(shè)置map任務(wù)的梳理來調(diào)整map任務(wù)的數(shù)據(jù)輸入
  3. maph和reduce任務(wù)的數(shù)量
  4. combine函數(shù)
  5. 壓縮
  6. 自定義comparator

Hadoop流

基本工作原理:

InputSplit->map>stdin>executable->stout->map->key/value

當(dāng)一個(gè)可執(zhí)行文件作為Mapper時(shí)冒冬,每一個(gè)map任務(wù)以一個(gè)獨(dú)立的進(jìn)程啟動(dòng)這個(gè)可執(zhí)行文件,然后在map任務(wù)運(yùn)行時(shí)摩渺,會(huì)把輸入切分成行提供給可執(zhí)行文件简烤,并作為它的標(biāo)準(zhǔn)輸入stdin內(nèi)容,當(dāng)可執(zhí)行文件運(yùn)行出結(jié)果

幾個(gè)問題

  • 新舊API之間的差別
  • 如何去重
  • 如何排序
  • reduce卡死
    reduce過程的百分比與對(duì)應(yīng)的處理如下:
    1. 0~33%是shuffle的過程摇幻,數(shù)據(jù)從mapper已到了reducer
    2. 33~67%是sort的過程横侦,這個(gè)過程只會(huì)在mapper完成后才會(huì)執(zhí)行
    3. 67~100%才是reducer程序執(zhí)行的過程。如果reduce卡在了67%绰姻,那么說明reducer一個(gè)也沒有執(zhí)行枉侧。可能是輸入數(shù)據(jù)太大狂芋,超過了限制榨馁,也可能是reducer有死循環(huán)的bug
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市帜矾,隨后出現(xiàn)的幾起案子翼虫,更是在濱河造成了極大的恐慌,老刑警劉巖屡萤,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件珍剑,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡死陆,警方通過查閱死者的電腦和手機(jī)招拙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來措译,“玉大人迫像,你說我怎么就攤上這事⊥椋” “怎么了闻妓?”我有些...
    開封第一講書人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)掠械。 經(jīng)常有香客問我由缆,道長(zhǎng),這世上最難降的妖魔是什么猾蒂? 我笑而不...
    開封第一講書人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任均唉,我火速辦了婚禮,結(jié)果婚禮上肚菠,老公的妹妹穿的比我還像新娘舔箭。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開白布层扶。 她就那樣靜靜地躺著箫章,像睡著了一般。 火紅的嫁衣襯著肌膚如雪镜会。 梳的紋絲不亂的頭發(fā)上檬寂,一...
    開封第一講書人閱讀 52,268評(píng)論 1 309
  • 那天,我揣著相機(jī)與錄音戳表,去河邊找鬼桶至。 笑死,一個(gè)胖子當(dāng)著我的面吹牛匾旭,可吹牛的內(nèi)容都是我干的镣屹。 我是一名探鬼主播,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼价涝,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼野瘦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起飒泻,我...
    開封第一講書人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤鞭光,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后泞遗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體惰许,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年史辙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了汹买。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡聊倔,死狀恐怖晦毙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情耙蔑,我是刑警寧澤见妒,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站甸陌,受9級(jí)特大地震影響须揣,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜钱豁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一耻卡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧牲尺,春花似錦卵酪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽溢豆。三九已至,卻和暖如春塑煎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背臭蚁。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來泰國打工最铁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人垮兑。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓冷尉,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親系枪。 傳聞我的和親對(duì)象是個(gè)殘疾皇子雀哨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

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