1.在客戶端啟動(dòng)一個(gè)作業(yè)。
2.向JobTracker請(qǐng)求一個(gè)Job ID。
3.將運(yùn)行作業(yè)所需要的資源文件復(fù)制到HDFS上,包括MapReduce程序打包的JAR文件、配置文件和客戶端計(jì)算所得的輸入劃分信息。這些文件都存放在JobTracker專門為該作業(yè)創(chuàng)建的文件夾中。文件夾名為該作業(yè)的Job ID。JAR文件默認(rèn)會(huì)有10個(gè)副本(mapred.submit.replication屬性控制);輸入劃分信息告訴了JobTracker應(yīng)該為這個(gè)作業(yè)啟動(dòng)多少個(gè)map任務(wù)等信息。
4.JobTracker接收到作業(yè)后,將其放在一個(gè)作業(yè)隊(duì)列里,等待作業(yè)調(diào)度器對(duì)其進(jìn)行調(diào)度(這里是不是很像微機(jī)中的進(jìn)程調(diào)度呢,呵呵),當(dāng)作業(yè)調(diào)度器根據(jù)自己的調(diào)度算法調(diào)度到該作業(yè)時(shí),會(huì)根據(jù)輸入劃分信息為每個(gè)劃分創(chuàng)建一個(gè)map任務(wù),并將map任務(wù)分配給TaskTracker執(zhí)行。對(duì)于map和reduce任務(wù),TaskTracker根據(jù)主機(jī)核的數(shù)量和內(nèi)存的大小有固定數(shù)量的map槽和reduce槽。這里需要強(qiáng)調(diào)的是:map任務(wù)不是隨隨便便地分配給某個(gè)TaskTracker的,這里有個(gè)概念叫:數(shù)據(jù)本地化(Data-Local)。意思是:將map任務(wù)分配給含有該map處理的數(shù)據(jù)塊的TaskTracker上,同時(shí)將程序JAR包復(fù)制到該TaskTracker上來(lái)運(yùn)行,這叫“運(yùn)算移動(dòng),數(shù)據(jù)不移動(dòng)”。而分配reduce任務(wù)時(shí)并不考慮數(shù)據(jù)本地化。
5.TaskTracker每隔一段時(shí)間會(huì)給JobTracker發(fā)送一個(gè)心跳,告訴JobTracker它依然在運(yùn)行,同時(shí)心跳中還攜帶著很多的信息,比如當(dāng)前map任務(wù)完成的進(jìn)度等信息。當(dāng)JobTracker收到作業(yè)的最后一個(gè)任務(wù)完成信息時(shí),便把該作業(yè)設(shè)置成“成功”。當(dāng)JobClient查詢狀態(tài)時(shí),它將得知任務(wù)已完成,便顯示一條消息給用戶。
聯(lián)系客服