1. MapReduce job提交java
提交過程比較簡單,submit() on a Job object, 經過waitForCompletion()等待job結束。waitForCompletion不斷輪詢當前job運行的進度。node
2.MapReduce job運行流程面試
運行過程有5個關鍵部分參與:客戶端,Yarn ResourceManager,Yarn NodeManager,MRAppMaster,HDFS,下面分別介紹。架構
客戶端:app
提交job任務框架
Yarn ResourceManager:分佈式
coordinates the allocation of compute resourceson the cluster.函數
整個集羣只有一個源碼分析
負責集羣計算資源的分配與調度性能
處理客戶端做業提交請求
啓動/監控ApplicationMaster
監控NodeManager
(容錯性)存在單點故障,基於ZooKeeper實現HA
Yarn NodeManager:
launch and monitor the compute containers onmachines in the cluster。
整個集羣有多個,負責單節點資源管理和使用(更細一點說,是負責啓動、監控和管理該計算節點上Container,防止Application Master使用多於它申請到的計算資源)
單個節點上的資源管理和任務管理(由於NodeManager負責啓動和監控管理Container,而ApplicationMaster和任務在Container中運行,所以Node Manager負責對它們使用的計算資源進行管理)
處理來自ResourceManager的命令
處理來自ApplicationMaster的命令
(容錯性)NodeManager失敗後,RM將失敗任務告訴對應的AM,AM決定如何處理失敗的任務
MRAppMaster:管理完成job而建立的task
每一個應用有一個,負責應用程序整個生命週期的管理
分佈式計算數據的切分
爲應用程序向Resource Manager申請計算資源(以Container爲單位,一個應用程序一般爲申請跟任務數相同個數的Container),並將Container分配給任務(實際上任務是在Container中執行的)
任務監控與容錯
(容錯性)失敗後,由Resource Manager負責重啓,Application Manager需處理內部任務的容錯問題,ApplicationManager運行過程當中會保存已經運行完成的Task,重啓後無需從新運行
HDFS:分佈式文件系統
2.1提交job
submit建立一個JobSubmitter實例,提交任務由該實例來完成。
step1:resource manager建立一個application id---mapreduce job ID。
step2: 檢查job的輸出, 好比輸出目錄是否已經存在, 存在就上報一個錯誤。
step3: 爲job計算input splits,這些input splits就是做爲Mapper的輸入。
step4: 複製運行job須要的資源到HDFS。包括job jar, 配置文件, the computed input splits
step5: 提交job經過submitApplication調用。
2.2 Job Initialization
當resource manager收到來自submitApplication的請求, 就會把請求發給YARN scheduler,scheduler會分配container,resource manager也會啓動job的application master主線程。application master主線程是由node manager管理。
application master至關於一個main class爲MRAppMaster的java應用。
a) 該應用會建立不少個bookkeeping對象, 來跟蹤job運行的進度。application master會接收來自task的進度和完成報告。
b)application master會接收input splits
c) 爲每一個input split建立一個map task對象, 並且會建立相應數目的reduce task對象(reduce task由 mapreduce.job.reduces屬性決定)。
d)決策tasks push到哪些node上去運行。
e) 建立輸出目錄和job task 運做過程當中須要的臨時輸出空間。
application master會向資源管理器爲全部map和reduce任務請求containers.
請求的內容:
map task的優先級會高於reduce, 直到5%的map task 完成以後,才能爲reduce task請求.
reduce task能在集羣的任何node上運行, 但map task有數據局部性限制。map task任務按與input split在同一個node, 同一個櫃子上, 同一個機房的不一樣櫃子上的優先順序分配。
包括cpu,內存等數據。
2.3 Task 執行
當resource manager's scheduler爲task分配好一個container資源, application master就會聯繫node manager啓動該container,開始執行Map任務或者Reduce任務,而後YarnChild爲main class的java應用就會執行task,所以任務是在稱爲YarnChild進程中運行,不一樣於Map Reduce 1,Yarn上每一個任務都會啓動一個新的JVM進程。YarnChild在執行task以前, 會在分佈式cache上找到該task須要的資源:jar file, 配置文件等。
2.4 Progress and Status Updates
Task有不少的事件計數器, 有些計數器是內置framewok中, 也有些事用戶自定義的。
2.5 Job Completion
application master接收到job最後一個 task完成的通知,就修改job狀態爲successful.
當job輪詢狀態時, 獲得successful狀態結果, 就return waitForcompletion()函數。
當job完成後,application master和task container會清理working狀態, 中間結果被清理, OutputCommitter scommitJob()會被調用。
感興趣能夠加Java架構師羣獲取Java工程化、高性能及分佈式、高性能、深刻淺出。高架構。性能調優、Spring,MyBatis,Netty源碼分析和大數據等多個知識點高級進階乾貨的直播免費學習權限 都是大牛帶飛 讓你少走不少的彎路的 羣..號是:855801563 對了 小白勿進 最好是有開發經驗
注:加羣要求
一、具備工做經驗的,面對目前流行的技術不知從何下手,須要突破技術瓶頸的能夠加。
二、在公司待久了,過得很安逸,但跳槽時面試碰壁。須要在短期內進修、跳槽拿高薪的能夠加。
三、若是沒有工做經驗,但基礎很是紮實,對java工做機制,經常使用設計思想,經常使用java開發框架掌握熟練的,能夠加。
四、以爲本身很牛B,通常需求都能搞定。可是所學的知識點沒有系統化,很難在技術領域繼續突破的能夠加。
5.阿里Java高級大牛直播講解知識點,分享知識,多年工做經驗的梳理和總結,帶着你們全面、科學地創建本身的技術體系和技術認知!