MapReduce框架在Yarn上的詳解

2021-07-11 02:55:41 字數 3196 閱讀 3703

在yarn

上乙個mapreduce

任務叫做乙個

job。乙個

job的主程式在

mapreduce

框架上實現的應用名稱叫

這是乙個mapreduce

為提高shuffle

效率reduce

階段會在

map階段結束之前就開始。

(直到所有

maptask

完成之後

reducetask

才能完成,因為每個

reducetask

依賴所有的

maptask

的結果)

首先看看map

階段,乙個

job需要多少

map task

吧當乙個客戶端提交的應用時會提供以下多種型別的資訊到yarn上。

輸出輸入資訊:

輸入目錄中的檔案數用於決定乙個job

的maptask

的數量。

split(分片)

建立乙個

maptask

。通常情況下,每個檔案都會是乙個

split

。如果檔案太大(大於

128m

、hdfs

預設塊大小)就會分為多個

split

並關聯到這個檔案,也就是乙個檔案會產生多個

map task

。獲取split

數量方法**如下

getsplits() of the fileinputformat class:

num_splits = 0

for each input file f:

remaining = f.length

while remaining / split_size > split_slope:

num_splits += 1

remaining -= split_size

split_slope = 1.1

split_size =~ dfs.blocksize

resource maneger

資源管理器提交

job所需要的資源:為每乙個

split

檔案申請乙個

container

來執行map task

。為了提高檔案讀取效率container

在map split

所在的機器上執行是最為理想的。因此

am會根據資料本地性

>cpu>

記憶體匹配的方式分配

container

當容器被分配給am

時map task

任務就會啟動。

這是乙個典型的map

執行場景:

現在讓我們專注於乙個map task

任務。這是

map task

任務執行時間線:

1. 建立乙個task

上下文,

reduce

也繼承自它

(taskattemptcontext.class)

2. 建立map例項

3. 設定input (e.g., inputformat.class, inputsplit.class, recordreader.class)

4. 設定output (newoutputcollector.class)

的上下文

6. 初始化輸入,例如

7. 建立乙個splitlinereader.class object

8. 建立乙個hdfsdatainputstream.class object

map的執行階段從

的run 

方法開始,我們通常要寫的也就是它了。預設情況下

run之前會呼叫

setup

setup

方法之後會對每乙個

執行map()

函式。之後

map context

會儲存這些資料到乙個快取區,為後續排序做準備。

當map

執行完處理時,還會呼叫乙個

clean

方法:預設情況下,也不執行任何操作,但使用者也可以重寫它。

執行階段期間map

會把資料寫進乙個快取區

(maptask.mapoutputbuffer)

。這個快取大小由配置項設定

mapreduce.task.io.sort.mb  (

預設:100mb)

。為了提高硬碟刷寫速度快取區達到

80%會寫資料到磁碟,會有乙個單獨的執行緒並行執行。當快取區容量達到

100%

那麼就要等到這個單獨的執行緒把資料寫完才能繼續執行

map方法。

排序執行緒會執行以下動作:

1. 建立乙個spillrecord和乙個fsoutputstream (在本地檔案系統

)2. 在記憶體中對鍵值對進行快速排序

3. 分割槽

4. 按順序寫入本地分割槽檔案。

shuffle階段主要是做資料的排序和合併操作,然後把資料存到本地檔案系統上,等待reduce來獲取資料。等到所有的maptask產出的資料傳輸都reduce機器上,並對資料進行排序以後才能算是shuffle過程的結束。也就說從map函式出來之後到reduce函式之前的所有資料操作都叫shuffle操作,包括排序、合併、分割槽、傳輸等。

reduce階段的run與map階段的run執行是類似的。

ref:

MapReduce框架在Yarn上的具體解釋

在yarn 上乙個mapreduce 任務叫做乙個 job。乙個job 的主程式在 mapreduce 框架上實現的應用名稱叫 這是乙個mapreduce 為提高shuffle 效率reduce 階段會在 map階段結束之前就開始。直到全部 maptask 完畢之後 reducetask 才幹完畢。...

RPC框架 yar學習

rpc採用客戶機 伺服器模式。請求程式就是乙個客戶機,而服務提供程式就是乙個伺服器。首先,客戶機呼叫程序傳送乙個有程序引數的呼叫資訊到服務程序,然後等待應答資訊。在伺服器端,程序保持睡眠狀態直到呼叫資訊的到達為止。當乙個呼叫資訊到達,伺服器獲得程序引數,計算結果,傳送答覆資訊,然後等待下乙個呼叫資訊...

MapReduce框架原理

mapreduce工作流程 reduce端 2 流程詳解 上面的流程是整個mapreduce最全工作流程,但是shuffle過程只是從第7步開始到第15步結束,具體shuffle過程詳解,如下 1 maptask 收集我們的 map 方法輸出的 kv對,放到記憶體緩衝區中 2 從記憶體緩衝區不斷溢位...