MapperTask 使用(yong)邏輯切片(pian)的方式劃分block,調用(yong)InputFormat中的算法進行(xing)劃分,TextInputFormat默認(ren)按(an)照(zhao)128M進行(xing)劃分(默認(ren)一(yi)(yi)個block至少(shao)有一(yi)(yi)片(pian)),每個分片(pian)以(yi)行(xing)首開頭,以(yi)行(xing)尾結(jie)尾。
每個分片對應(ying)一個mapper讀(du)入(ru)數(shu)據后,調用mapper函(han)數(shu)轉換成(k,v)形式,然(ran)后按照分區排序,分批溢(yi)寫到(dao)磁盤(pan)。
Shuffle 從map分(fen)區排序溢寫到reduce拉取數據的過程稱為shuffle。
每個(ge)mapTask都有一(yi)個(ge)緩存區域,當調用write方法時,數據先寫入到緩存區域中,數據寫滿(man)80%后會先進行分(fen)組排序然后溢寫到磁盤,剩下的20%繼續同步寫入數據。
如果定(ding)義(yi)了combine方(fang)法,則這里會發生(sheng)分組內的聚(ju)合。
一個(ge)(ge)mapTask最(zui)終會生成多個(ge)(ge)臨時文(wen)件,最(zui)后將(jiang)這些(xie)臨時文(wen)件使用歸并(bing)(bing)排序(xu)合并(bing)(bing)成一個(ge)(ge)大(da)文(wen)件,并(bing)(bing)按(an)照分區器規(gui)則維護(hu)一個(ge)(ge)索引文(wen)件,在合并(bing)(bing)過程中也可(ke)以(yi)發生分組內聚合。
reducerTask數量由用戶設定,每個(ge)reducer對應一個(ge)分區數據。
reducer拉(la)取分區數據到本地,一(yi)次性讀入(ru)一(yi)組數據執(zhi)行reduce方(fang)法,然后(hou)按照(zhao)OutPutFormat的輸出格(ge)式將(jiang)最終(zhong)結(jie)果輸出到hdfs,每個reducer對應一(yi)個文件。