MapReduce框架在Yarn上的具體解釋

2021-09-07 13:19:00 字數 3237 閱讀 4111

在yarn

上乙個mapreduce

任務叫做乙個

job。

乙個job

的主程式在

mapreduce

框架上實現的應用名稱叫

這是乙個mapreduce

為提高shuffle

效率reduce

階段會在

map階段結束之前就開始。

(直到全部

maptask

完畢之後

reducetask

才幹完畢。由於每乙個

reducetask

依賴全部的

maptask

的結果)

首先看看map

階段,乙個

job須要多少

map task

吧當乙個client提交的應用時會提供下面多種型別的資訊到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 從記憶體緩衝區不斷溢位...