job.waitforcompletion(true);進入原始碼
submit()-> connect();連線,客戶端獲取服務端的**物件
connect()->new cluster(getconfiguration());
cluster(jobtrackaddr,conf)->initialize->clientprotocol rpc通訊versionid
submit() ->submitter.submitjobinternal(job.this, cluster):
checkspecs(job);檢查路徑
copyandconfigurefiles(job, submitjobdir);拷貝並且將檔案寫入到hfds
printtokens(jobid, job.getcredentials());
submitjob(jobid, submitjobdir.tostring(), job.getcredentials())提交job
int maps = writesplits(job, submitjobdir);job分割切片
writesplits()-》maps = writenewsplits(job, jobsubmitdir);-》 list splits = input.getsplits(job);//fileinputformat獲取切片
list getsplits(jobcontext job)-》long minsize = math.max(getformatminsplitsize(), getminsplitsize(job));
getminsplitsize(job)獲取mapreduce.input.fileinputformat.split.minsize的值(hadoop-mapreduce-client-core-》mapred-default.xml)
list getsplits(jobcontext job)-》long minsize 最終為1
list getsplits(jobcontext job)-》long maxsize = getmaxsplitsize(job);-》在mapred-default.xml沒有獲取到值,得long的最大值
返切片檔案列表splits
MapReduce原始碼分析心得
分布式計算追求 沒有計算發生。支撐了計算向資料移動,和計算的並行度。做的最主要的是 儲存與計算解耦,就是對所要進行切片的資料進行split切片,split map並行度 split預設是與block塊數量一致,目的是為了計算向資料移動,幾個block塊分布在幾個地方,就起幾個map,這樣就不需要讓大...
MapReduce流程講解以及原始碼分析
對於使用者來說只需要書寫map操作和reduce操作 mapreduce計算資料的時間較長 整個過程分為map和reduce,map負責處理原始資料,reduce負責處理map資料 1.map過程 block 塊 物理上的概念,預設是128m split 切片 本次map任務要處理的資料的大小 預設...
MapReduce原始碼 二
下圖是context類的繼承關係 不同層次的類的互動物件有所不同 mapcontext 關注 recordreaderreader 和 inputsplit split taskinputoutputcontext關注 recordwriteroutput statusreporter report...