在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 = 0for each input file f:
remaining = f.length
while remaining / split_size > split_slope:
num_splits += 1
remaining -= split_size
split_slope = 1.1resource manegersplit_size =~ dfs.blocksize
資源管理器提交
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 從記憶體緩衝區不斷溢位...