版權(quán)聲明:本套技術(shù)專欄是作者(秦凱新)平時(shí)工作的總結(jié)和升華鸥咖,通過從真實(shí)商業(yè)環(huán)境抽取案例進(jìn)行總結(jié)和分享,并給出商業(yè)應(yīng)用的調(diào)優(yōu)建議和集群環(huán)境容量規(guī)劃等內(nèi)容兄世,請(qǐng)持續(xù)關(guān)注本套博客啼辣。版權(quán)聲明:禁止轉(zhuǎn)載,歡迎學(xué)習(xí)御滩。
1. Hadoop分布式計(jì)算架構(gòu)流程分析
- 1)在MapReduce程序讀取文件的輸入目錄上存放相應(yīng)的文件鸥拧。
- 2)客戶端程序在submit()方法執(zhí)行前,獲取待處理的數(shù)據(jù)信息削解,然后根據(jù)集群中參數(shù)的配置形成一個(gè)任務(wù)分配規(guī)劃富弦。
- 3)客戶端提交job.split、jar包氛驮、job.xml等文件給yarn腕柜,yarn中的resourcemanager啟動(dòng)MRAppMaster。
- 4)MRAppMaster啟動(dòng)后根據(jù)本次job的描述信息矫废,計(jì)算出需要的maptask實(shí)例數(shù)量盏缤,然后向集群申請(qǐng)機(jī)器啟動(dòng)相應(yīng)數(shù)量的maptask進(jìn)程。
- 5)maptask利用客戶指定的inputformat來讀取數(shù)據(jù)蓖扑,形成輸入KV對(duì)唉铜。
- 6)maptask將輸入KV對(duì)傳遞給客戶定義的map()方法,做邏輯運(yùn)算
- 7)map()運(yùn)算完畢后將KV對(duì)序列化后寫到環(huán)形緩沖區(qū)律杠,環(huán)形緩沖區(qū)默認(rèn)是100M,寫滿80%后潭流,會(huì)根據(jù)Hash(結(jié)合Reduce Task 的數(shù)量柿赊,不會(huì)超過Reduce Task的數(shù)量)溢寫,溢寫過程中使緩存中的KV對(duì)按照K分區(qū)排序后不斷寫到磁盤文件從而形成不同的分區(qū)幻枉,若設(shè)置了本地聚合碰声,則會(huì)合并Combiner多個(gè)溢寫文件為一個(gè)。
- 9)MRAppMaster監(jiān)控到所有maptask進(jìn)程任務(wù)完成之后熬甫,會(huì)根據(jù)客戶指定的參數(shù)啟動(dòng)相應(yīng)數(shù)- 量的reducetask進(jìn)程胰挑,并告知reducetask進(jìn)程要處理的數(shù)據(jù)分區(qū)。
- 10)Reducetask進(jìn)程啟動(dòng)之后椿肩,根據(jù)MRAppMaster告知的待處理數(shù)據(jù)所在位置瞻颂,從若干臺(tái)maptask運(yùn)行所在機(jī)器上獲取到若干個(gè)maptask輸出結(jié)果文件,并在本地進(jìn)行重新歸并排序郑象,然后按照相同key的KV為一個(gè)組贡这,調(diào)用客戶定義的reduce()方法進(jìn)行邏輯運(yùn)算。
- 11)Reducetask運(yùn)算完畢后厂榛,調(diào)用客戶指定的outputformat將結(jié)果數(shù)據(jù)輸出到外部存儲(chǔ)盖矫。
2. Hadoop分布式計(jì)算流程圖
- 1)分布式的運(yùn)算程序往往需要分成至少2個(gè)階段。
- 2)第一個(gè)階段的maptask并發(fā)實(shí)例击奶,完全并行運(yùn)行辈双,互不相干。
- 3)第二個(gè)階段的reduce task并發(fā)實(shí)例互不相干柜砾,但是他們的數(shù)據(jù)依賴于上一個(gè)階段的所有maptask并發(fā)實(shí)例的輸出湃望。
-
4)MapReduce編程模型只能包含一個(gè)map階段和一個(gè)reduce階段,如果用戶的業(yè)務(wù)邏輯非常復(fù)雜痰驱,那就只能多個(gè)mapreduce程序证芭,串行運(yùn)行。
如下圖展示了這個(gè)MapReduce過程:
3 總結(jié)
秦凱新 于深圳