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