MR MapTask工作機制

2021-10-03 08:54:37 字數 1298 閱讀 2901

1、圖示

2、流程

(1) read 階段:maptask 通過使用者編寫的 recordreader,從輸入 inputsplit 中解析出 key/value。

(2) map階段:該節點主要是將解析出的 key/value 交給使用者編寫 map() 函式處理,並產生一系列新的 key/value。

(3) collect 收集階段:在使用者編寫 map() 函式中,當資料處理完成後,一般會呼叫 outputcollector

.collect() 輸出結果。在該函式內部,它會將生成的 key/value 分割槽 (呼叫 partitioner)並寫入乙個環形記憶體緩衝區中。

(4) spill 階段:即「溢寫」,當環形緩衝區滿後,mapreduce 會將資料寫到本地磁碟上,生成乙個臨時檔案。需要注意的是,將資料寫入本地磁碟之前,先要對資料進行一次本地排序,並在必要時對資料進行合併、壓縮等操作。

溢寫階段詳情:

步驟 1:利用快速排序演算法對快取區內的資料進行排序,排序方式是,先按照分割槽編號 partition 進行排序,然後按照 key 進行排序。這樣,經過排序後,資料以分割槽為單位聚集在一起,且同一分區內所有資料按照 key 有序。

步驟 2:按照分割槽編號由小到大依次將每個分割槽中的資料寫入任務工作目錄下的臨時文 output/spilln.

out(n 表示當前溢寫次數)中。如果使用者設定了 combiner,則寫入檔案之前,對每個分割槽中的資料進行一次聚集操作。

步驟 3:將分割槽資料的元資訊寫到記憶體索引資料結構 spillrecord 中,其中每個分割槽的元資訊包括在臨時檔案中的偏移量、壓縮前資料大小和壓縮後資料大小。如果當前記憶體索引大小超過 1mb,則將記憶體索引寫到檔案 output/spilln.out.index 中。

(5) combine 階段:當所有資料處理完成後,maptask 對所有臨時檔案進行一次合併,以確保最終只會生成乙個資料檔案。

當所有資料處理完後,maptask 會將所有臨時檔案合併成乙個大檔案,並儲存到檔案 output/file.out中,同時生成相應的索引檔案 output/file.out.index。

在進行檔案合併過程中,maptask 以分割槽為單位進行合併。對於某個分割槽,它將採用多輪遞迴合併的方式。每輪合併 io.sort.factor(預設10)個檔案,並將產生的檔案重新加入待合併列表中,對檔案排序後,重複以上過程,直到最終得到乙個大檔案。

讓每個 maptask 最終只生成乙個資料檔案,可避免同時開啟大量檔案和同時讀取大量小檔案產生的隨機讀取帶來的開銷。

HttpModule工作機制

httpmodule是如何工作的 當乙個http 請求到達 時,整個 asp.net framework 系統還並沒有對這個 請求做任何處理,也就是說此時對於 請求來講,是乙個http 請求的 必經之路 所以可以在這個 請求傳遞到真正的請求處理中心 之前附加一些需要的資訊在這個 請求資訊之上,或者針...

STL工作機制

define crt secure no warnings includeusing namespace std templateclass array t begin t end public int size int capacity t paddress 遍歷演算法 templatevoid ...

Spring SpringMVC 工作機制

1.spring mvc請所有的請求都提交給 dispatcherservlet,它會委託應用系統的其他模組負責負責對請求進行真正的處理工作。3.dispatcherservlet請請求提交到目標 controller 4.controller進行業務邏輯處理後,會返回乙個modelandview ...