Hadoop MapReduce Job提交后的交互日志

通過混合 NamdeNode, DataNode, ResourceManager,NodeManager的日志輸出, 和 提交MapReduce Job的console輸出日志,形成時(shí)間序列上的日志輸出。

這樣可以方便查看從client端提交job,整個(gè)hadoop的內(nèi)部交互的大致過程。

MapReduce Job的console輸出來自執(zhí)行簡單編寫的例子: bin/hadoop jar hellohadoop-1.0-SNAPSHOT.jar WordCount demo out 后的輸出。

HDFS文件中保存job的位置在 /tmp/hadoop-yarn/staging/bruce/.staging/job_1449210909990_0001下。

可以看到文件:

appTokens

job.jar

job.split

job.splitmetainfo

job.xml
job.split和job.splitmetainfo兩個(gè)文件存儲(chǔ)了有關(guān)InputSplit的信息。我們知道,Hadoop MapReduce將所有的輸入文件劃分成一個(gè)一個(gè)的InputSplit(劃分規(guī)則由InputFormat的實(shí)現(xiàn)類定義),且為每一個(gè)InputSplit,JobTracker將分配一個(gè)task交給TaskTracker去執(zhí)行map。那么,在啟動(dòng)Job之前,首先需要完成文件劃分,這個(gè)實(shí)際上是由Client端來執(zhí)行。Client完成文件劃分后,將劃分信息寫入job.split和job.splitmetainfo,然后寫這兩個(gè)文件到staging dir。

接下來的問題是,為什么需要有兩個(gè)文件,它們分別存儲(chǔ)了什么樣的信息?如下圖所示,job.split存儲(chǔ)了所有劃分出來的InputSplit,而每個(gè)InputSplit記錄如下信息:

該Split的類型(ClassName, mostly org.apache.hadoop.mapreduce.lib.input.FileSplit)
該Split所屬文件的路徑(FilePath)
該Split在所屬文件中的起始位置(FileOffset)
該Split的字節(jié)長度(Length)

job.splitmetainfo存儲(chǔ)了有關(guān)InputSplit的元數(shù)據(jù):
該Split在哪些Node上是local data(Location)
該Split對(duì)應(yīng)的InputSplit在job.split文件中的位置(SplitFileOffset)
該Split的字節(jié)長度(Length, the same as that in job.split)


job.splitmetainfo提供給JobTracker讀取。比如,根據(jù)# Split,JobTracker能知道該分配多少個(gè)Task;根據(jù)Location,JobTracker能決定將該Split對(duì)應(yīng)的Task分配給哪個(gè)Node去執(zhí)行(優(yōu)先分配到擁有該Split local data的Node)
job.split提供給TaskTracker讀取。根據(jù)FilePath, FileOffset, Length,TaskTracker知道從哪個(gè)文件的哪個(gè)位置開始讀取要處理的Split data。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容