mapreduce的執(zhí)行過程

wordcount

  • 關于切片
    劃分maptask任務她紫,由客戶端(提交job)完成济赎,寫入文件交給mr appmaster渺鹦。這里的任務切片是一個邏輯片恶耽,和hdfs的block是不同的概念。對于大文件决左,切片一般按照block的大小來切愕够,方便后續(xù)執(zhí)行maptask時數(shù)據(jù)的讀取。對于一些小文件佛猛,需要把多個block切成一片惑芭。一個切片對應一個maptask實例。切片由fileinputformat中的getSplit()來完成继找,結果寫入切片規(guī)劃文件遂跟。切片大小(由minsize婴渡,maxsize幻锁,blocksize幾個值決定)的邏輯:Math.max(minSize,Math.min(maxSize,blockSize))。參數(shù)在conf中設置缩搅。

  • 關于mapreduce中的序列化
    map和reduce的輸出都需要經(jīng)過傳輸和實體化存儲越败,所以都需要讓它實現(xiàn)一個序列化框架,hadoop里面有一個內(nèi)置的序列化框架writable硼瓣。輸出的所有數(shù)據(jù)都需要實現(xiàn)writable接口究飞。如果輸出不是它內(nèi)置的數(shù)據(jù)類型(比如text置谦,longwritable,intwritrable)亿傅,而是我們一個自定義的對象媒峡,就必須去實現(xiàn)writable接口。

  • mapreduce全過程
    mapreduce中通過InputFormat組件來讀取數(shù)據(jù)葵擎。我們讀入的數(shù)據(jù)是什么谅阿,后續(xù)處理的數(shù)據(jù)時什么完全取決于這個接口。它把外部的數(shù)據(jù)源與內(nèi)部的處理邏輯完全解耦酬滤。InputFormat默認讀取文本文件的組件是:TextInputformat签餐。maptask讀取數(shù)據(jù)時我們調(diào)用其成員RecordReader的read()方法,取得kv對返回給Mapper中的map()方法盯串。

InputFormat

map()方法中是我們自定義的業(yè)務邏輯氯檐,執(zhí)行完邏輯后context.write(k,v)。把map過后的結果交給Outputcollector体捏。OutputCollector把數(shù)據(jù)寫入環(huán)形緩沖區(qū)(就是一個環(huán)形數(shù)組)冠摄。環(huán)形緩沖區(qū)中有一個保留區(qū)來進行分區(qū)排序。
分區(qū)排序?qū)崿F(xiàn):
默認分區(qū)是:HashPartitioner(hashcode模除以2(這個數(shù)字可以用來調(diào)整分區(qū)數(shù)))几缭。排序:quicksort和外部排序混合使用河泳。Key.compareTo。
緩沖區(qū)中的數(shù)據(jù)積累到一定閾值(如80%)通過spiller溢出(maptask完畢后還會有一次清空溢出)年栓。溢出一次寫一個文件拆挥,這些文件分區(qū)且有序。最后再merge這些文件(mergesort)形成一個maptask的最終文件韵洋。在這個文件中有幾個分區(qū)就會有幾個reducer竿刁,且這個分區(qū)與環(huán)形緩沖區(qū)中分區(qū)相對應黄锤。

shuffle

maptask結束后搪缨,開始reducetask。reducer到執(zhí)行maptask的機器下載屬于自己分區(qū)的數(shù)據(jù)到其本地磁盤工作目錄鸵熟,有幾個maptask對應下載到幾個文件副编。然后將這幾個文件merge(mergesort)。reducer里自定義的reduce方法流强,對每一組key(相同key即為一組痹届,通過GroupingComparator(k,nextk)組件判斷key是否相同)。reduce(k,v)中一組中第一個傳入的key作為k打月,value是一個可以迭代這一組value的迭代器队腐。執(zhí)行完自定義reduce()的邏輯后context.write(k,v)。然后調(diào)用OutputFormat(默認TextOutputFormat)中的RecordWriter中的write(k,v)方法把結果寫入FileoutputFormat.setoutputpath(file://'xx')中奏篙。不同的reducer寫出不同的文件柴淘,part-r00000迫淹,part-r00001……。

  • combiner
    在maptask的本地先完成一些類似reduce的操作为严。從環(huán)形緩沖區(qū)溢出時spiller去調(diào)用combiner把相同key的value累加敛熬。在merge溢出文件時也可以調(diào)用combiner累加value。
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末第股,一起剝皮案震驚了整個濱河市应民,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌夕吻,老刑警劉巖诲锹,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異涉馅,居然都是意外死亡辕狰,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門控漠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蔓倍,“玉大人,你說我怎么就攤上這事盐捷∨汲幔” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵碉渡,是天一觀的道長聚谁。 經(jīng)常有香客問我,道長滞诺,這世上最難降的妖魔是什么形导? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮习霹,結果婚禮上朵耕,老公的妹妹穿的比我還像新娘。我一直安慰自己淋叶,他們只是感情好阎曹,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著煞檩,像睡著了一般处嫌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上斟湃,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天熏迹,我揣著相機與錄音,去河邊找鬼凝赛。 笑死注暗,一個胖子當著我的面吹牛厨剪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播友存,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼祷膳,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了屡立?” 一聲冷哼從身側響起直晨,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎膨俐,沒想到半個月后勇皇,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡焚刺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年敛摘,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片乳愉。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡兄淫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蔓姚,到底是詐尸還是另有隱情捕虽,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布坡脐,位于F島的核電站泄私,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏备闲。R本人自食惡果不足惜晌端,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望恬砂。 院中可真熱鬧咧纠,春花似錦、人聲如沸觉既。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瞪讼。三九已至,卻和暖如春粹断,著一層夾襖步出監(jiān)牢的瞬間符欠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工瓶埋, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留希柿,地道東北人诊沪。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像曾撤,于是被迫代替她去往敵國和親端姚。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

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