Hadoop之MapTask工作机制
Hadoop之MapTask工作機制
目錄
1. 并行度決定機制
maptask的并行度決定map階段的任務處理并發度,進而影響到整個job的處理速度。那么,mapTask并行任務是否越多越好呢?
一個job的map階段MapTask并行度(個數),由客戶端提交job時的切片個數決定,如下圖所示。
2. MapTask工作機制
MapTask工作機制如下圖
Read階段:Map Task通過用戶編寫的RecordReader,從輸入InputSplit中解析出一個個key/value。
Map階段:該節點主要是將解析出的key/value交給用戶編寫map()函數處理,并產生一系列新的key/value。
Collect收集階段:在用戶編寫map()函數中,當數據處理完成后,一般會調用OutputCollector.collect()輸出結果。在該函數內部,它會將生成的key/value分區(調用Partitioner),并寫入一個環形內存緩沖區中。
Spill階段:即“溢寫”,當環形緩沖區滿后,MapReduce會將數據寫到本地磁盤上,生成一個臨時文件。需要注意的是,將數據寫入本地磁盤之前,先要對數據進行一次本地排序,并在必要時對數據進行合并、壓縮等操作。
溢寫階段詳情:
Combine階段:當所有數據處理完成后,MapTask對所有臨時文件進行一次合并,以確保最終只會生成一個數據文件。
當所有數據處理完后,MapTask會將所有臨時文件合并成一個大文件,并保存到文件output/file.out中,同時生成相應的索引文件output/file.out.index。
在進行文件合并過程中,MapTask以分區為單位進行合并。 對于某個分區,它將采用多輪遞歸合并的方式。每輪合并io.sort.factor(默認100)個文件,并將產生的文件重新加入待合并列表中,對文件排序后,重復以上過程,直到最終得到一個大文件。
讓每個MapTask最終只生成一個數據文件,可避免同時打開大量文件和同時讀取大量小文件產生的隨機讀取帶來的開銷。
總結
以上是生活随笔為你收集整理的Hadoop之MapTask工作机制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hadoop之InputFormat数据
- 下一篇: Hadoop之Shuffle机制详解