MR 原始碼分析

2021-10-19 13:17:38 字數 2265 閱讀 8299

mapreduce shuffle詳解:

// 入口:執行wordcount例子。 job的提交

job.waitforcompletion -

> submit

->

connect

(連線yarn集群);-

>submitter.submitjobinternal -

> submitclient.submitjob

- -

-yarnchild.main -

> taskfinal.

run(呼叫給乙個 task 執行(maptask, reducetask))

-> maptask.run -

>()

}finally}}

1、context.

nextkeyvalue()

-> mapcontext.

nextkeyvalue()

;-> reader.

nextkeyvalue()

-> linerecordreader.

nextkeyvalue

(讀取資料,並更新偏移量,下一次來讀下一行)

2、map方法處理完後 -

> context.

write

((keyout) key,

(valueout) value);-

> mapcontext.

write

(key, value)

; taskinputoutputcontextimpl.write -

> output.

write

(key, value);-

> newoutputcollector.

write()

當寫入80

%的時候,開始溢寫磁碟

spillthread spill執行緒 run -

> sortandspill

-> sorter.

sort

(mapoutputbuffer.

this

, mstart, mend, reporter)

; 快排

// 遍歷每個分割槽,寫出真實資料,同時記錄索引!

for(

int i =

0; i < partitions;

++i)

else

}

spill後執行merge合併小檔案

run; 後面 output.

close;-

> collector.

flush()

;->

mergeparts()

整體流程 partitioner -

> kvbuffer -

> sort -

> combine -

> spill -

> merge 詳見

reducetask

reducetask.

run()}

runnewreducer -

> reducer.

run(reducercontext)

}// 讀取key相同的一組資料,從上一步驟的拉取資料和合併成為的最終大磁碟檔案中掃瞄得到

context.

nextkey()

-> reducecontextimpl.

nextkey()

public

boolean

nextkey()

throws ioexception, interruptedexception

if(hasmore)

return

nextkeyvalue()

;}else

} 讀取中間容器中的資料:讀取到這個容器的迭代器物件

reduce

(context.

getcurrentkey()

, context.

getvalues()

, context);-

> context.write -

> newtrackingrecordwriter.write -

> linerecordwriter.write

copy -

> sort -

> merge -

> spill -

> merge -

> reduce -

> write

hadoop原始碼研究 M R 1

inputformat 將輸入的資料集切割成小資料集 inputsplits,此外 inputformat 中還提供乙個 recordreader 的實現,將乙個 inputsplit 解析成 對提供給 map 函式。預設 textinputformat 針對文字檔案,按行將文字檔案切割成 inpu...

spring原始碼分析 spring原始碼分析

1.spring 執行原理 spring 啟動時讀取應用程式提供的 bean 配置資訊,並在 spring 容器中生成乙份相應的 bean 配置登錄檔,然後根據這張登錄檔例項化 bean,裝配好 bean 之間的依賴關係,為上 層應用提供準備就緒的執行環境。二 spring 原始碼分析 1.1spr...

思科VPP原始碼分析(dpo機制原始碼分析)

vpp的dpo機制跟路由緊密結合在一起。路由表查詢 ip4 lookup 的最後結果是乙個load balance t結構。該結構可以看做是乙個hash表,裡面包含了很多dpo,指向為下一步處理動作。每個dpo都是新增路由時的乙個path的結果。dpo標準型別有 dpo drop,dpo ip nu...