MapTask工作機制圖文詳解
MapTask工作機制如圖所示。

(1)Read階段:MapTask通過用戶編寫的RecordReader,從輸入InputSplit中解析出一個個key/value。
(2)Map階段:該節(jié)點主要是將解析出的key/value交給用戶編寫map()函數(shù)處理,并產(chǎn)生一系列新的key/value。
(3)Collect收集階段:在用戶編寫map()函數(shù)中,當數(shù)據(jù)處理完成后,一般會調用OutputCollector.collect()輸出結果。在該函數(shù)內(nèi)部,它會將生成的key/value分區(qū)(調用Partitioner),并寫入一個環(huán)形內(nèi)存緩沖區(qū)中。
(4)Spill階段:即“溢寫”,當環(huán)形緩沖區(qū)滿后,MapReduce會將數(shù)據(jù)寫到本地磁盤上,生成一個臨時文件。需要注意的是,將數(shù)據(jù)寫入本地磁盤之前,先要對數(shù)據(jù)進行一次本地排序,并在必要時對數(shù)據(jù)進行合并、壓縮等操作。
溢寫階段詳情:
- 步驟1:利用快速排序算法對緩存區(qū)內(nèi)的數(shù)據(jù)進行排序,排序方式是,先按照分區(qū)編號Partition進行排序,然后按照key進行排序。這樣,經(jīng)過排序后,數(shù)據(jù)以分區(qū)為單位聚集在一起,且同一分區(qū)內(nèi)所有數(shù)據(jù)按照key有序。
- 步驟2:按照分區(qū)編號由小到大依次將每個分區(qū)中的數(shù)據(jù)寫入任務工作目錄下的臨時文件output/spillN.out(N表示當前溢寫次數(shù))中。如果用戶設置了Combiner,則寫入文件之前,對每個分區(qū)中的數(shù)據(jù)進行一次聚集操作。
- 步驟3:將分區(qū)數(shù)據(jù)的元信息寫到內(nèi)存索引數(shù)據(jù)結構SpillRecord中,其中每個分區(qū)的元信息包括在臨時文件中的偏移量、壓縮前數(shù)據(jù)大小和壓縮后數(shù)據(jù)大小。如果當前內(nèi)存索引大小超過1MB,則將內(nèi)存索引寫到文件output/spillN.out.index中。
(5)Combine階段:當所有數(shù)據(jù)處理完成后,MapTask對所有臨時文件進行一次合并,以確保最終只會生成一個數(shù)據(jù)文件。
當所有數(shù)據(jù)處理完后,MapTask會將所有臨時文件合并成一個大文件,并保存到文件output/file.out中,同時生成相應的索引文件output/file.out.index。
在進行文件合并過程中,MapTask以分區(qū)為單位進行合并。對于某個分區(qū),它將采用多輪遞歸合并的方式。每輪合并io.sort.factor(默認10)個文件,并將產(chǎn)生的文件重新加入待合并列表中,對文件排序后,重復以上過程,直到最終得到一個大文件。
讓每個MapTask最終只生成一個數(shù)據(jù)文件,可避免同時打開大量文件和同時讀取大量小文件產(chǎn)生的隨機讀取帶來的開銷。
總結
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關內(nèi)容請查看下面相關鏈接
相關文章
springcloud項目占用內(nèi)存好幾個G導致服務器崩潰的問題
這篇文章主要介紹了springcloud項目占用內(nèi)存好幾個G導致服務器崩潰的問題,本文給大家分享解決方案供大家參考,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10
springboot中json對象中對Long類型和String類型相互轉換
與前端聯(lián)調接口時,后端一些字段設計為Long類型,這樣就有可能導致前端缺失精度,這時候我們就需要將Long類型返回給前端時做數(shù)據(jù)類型轉換,本文主要介紹了springboot中json對象中對Long類型和String類型相互轉換,感興趣的可以了解一下2023-11-11
Java 枚舉類和自定義枚舉類和enum聲明及實現(xiàn)接口的操作
這篇文章主要介紹了Java 枚舉類和自定義枚舉類和enum聲明及實現(xiàn)接口的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02
InterProcessMutex實現(xiàn)zookeeper分布式鎖原理
本文主要介紹了InterProcessMutex實現(xiàn)zookeeper分布式鎖原理,文中根據(jù)實例編碼詳細介紹的十分詳盡,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03

