二 MapReduce 各階段流程分析

2021-10-10 11:25:04 字數 3234 閱讀 8667

系統資源,尤其是

集群內部網路資源使用情況。 mr 可以執行在共享集群上處理 tb 級 甚至 pb 級的資料。同時,改作業與共享集群的機器上數以百計的

任務存在

競爭關係。

mapreduce 關注點:

hadoop mapreduce

作業被分成一系列執行在分布式集群中的

map 任務和

reduce 任務。因此負載是遍布集群中的各個節點的。 map 任務主要負責資料的

載入、解析、轉換、和過濾。每個 reduce 任務

負責處理 map 任務輸出結果的乙個

子集 ,

檔案分塊block,split讀塊,到map,到reduce的過程

下面引用的這個圖 特麼有點問題。  畫錯了。

partitioner 是根據 key 或 value 及 reduce 的數量來決定當前的這對輸出資料交給那個 reduce task,預設是對 key 進行 hash 後 再以reduce 數量取模。是為了平均 reduce 的處理能力。partitioner 的預設記憶體緩衝區是 100mb,當 maptask輸出更多結果的時候就會將資料

刷入磁碟中形成臨時檔案,然後再次利用緩衝區進行寫。 就是

spill 過程。溢寫是由單獨執行緒來完成,不影響往緩衝區寫 map 結果的執行緒。 溢寫的閾值時 0.8 也就是 80mb 後開始啟動 溢寫, spill 會將這80mb

記憶體鎖定,

執行溢寫。 maptask 還可以繼續寫入剩下的20mb 互不影響。

記憶體緩衝區不會對傳送到相同的 reduce 端的

資料做合併,

合併是體現在磁碟檔案中的,官方圖上講的是

溢寫檔案 會對不同的 reduce 端做資料合併。 減少 partition 相關的記錄。   溢寫執行緒啟動後會對 80mb 空間的 key 做排序(sort過程 預設)。combiner 做累加、最大值、最小值等不影響輸出結果的操作很適合。

reduce (

shuffer  

) 1 拉取map結果,不斷的做 merge, 

merge有三種形 式:1)記憶體到記憶體 2)記憶體到磁碟 3)磁碟到磁碟。 

2 不斷 merge 後,產生乙個最終檔案。 可能記憶體,也可能磁碟中。 當reduce 輸入檔案copy 完成。開始執行 reduce 最後是結果放入 hdfs

應該是

可以概括為5個步驟:

1)read:map task通過使用者編寫的recordreader,從輸入inputsplit中解析出乙個個key/value。

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

3)collect:在使用者編寫的map()函式中,當資料處理完成後,一般會呼叫outputcollector.collect()輸入結果。在該函式內部,它會將生成的 key/value分片(通過partitioner),並寫入乙個環形記憶體緩衝區中。

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

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

可以概括為5個步驟:

1)shuffle:也稱copy階段。reduce task從各個map task上遠端拷貝一片資料,並針對某一片資料,如果其大小超過一定閥值,則寫到磁碟上,否則直接放到記憶體中。

2)merge:在遠端拷貝的同時,reduce task啟動了兩個後台執行緒對記憶體和磁碟上的檔案進行合併,以防止記憶體使用過多或者磁碟上檔案過多。

3)sort:按照mapreduce語義,使用者編寫的reduce()函式輸入資料是按key進行聚集的一組資料。為了將key相同的資料聚在一 起,hadoop採用了基於排序的策略。由於各個map task已經實現了對自己的處理結果進行了區域性排序,因此,reduce task只需對所有資料進行一次歸併排序即可。

4)reduce:在該階段中,reduce task將每組資料依次交給使用者編寫的reduce()函式處理。

5)write:reduce()函式將計算結果寫到hdfs。

hadoop 1.0 :

map 任務階段:

-> combiner -> partitioner

reduce 任務階段:

shuffer

-> sort -> reduce -> output format

各個階段理解:

record reader 

map處理 record reader 解析鍵值對來產生 0 或多個新的 鍵值對 結果。

combiner

可選的本地 reduce,可以在 map 階段聚合資料。

例: 傳送一次 3m的資料塊 比 傳送 3 次 1m 的資料塊要節省很多位元組量。

通常 combiner可以產生特別大的效能提公升,並且還木有***。

partitioner

shuffer (混排 和 排序)

將所有的 partitioner 寫入的輸出檔案拉取到執行 reducer 的本地機器上,然後將資料按鍵排序,在寫入到乙個較大的資料列表中。 

目的是將相同鍵的記錄聚合在一起。

這個過程完全不可定製。 開發人員只能通過自定義 comparator

物件來確定鍵如何排序和分組。

reduce

將已經分組的資料作為輸入,並依次為每個鍵對應分組執行 reduce 函式。 

output format 

輸出格式

獲取 mapreduce 函式輸出的最終鍵值對。 並通過 record writer 寫入到輸出檔案中。每條記錄預設 tab 鍵分割。不同記錄通過換行符分割。 一般情況都是自定義輸出格式。

來自為知筆記(wiz)

效能測試流程 各階段的工作

測試計畫階段主要工作如下 1 明確測試物件 2 定義測試目標 3 定義測試通過的標準 4 規劃測試進度 5 規劃測試參與人員 需求 開發 測試 運維和配置 6 申請測試資源 7 風險控制 測試設計階段主要工作如下 1 測試用例設計 2 測試方法設計 單場景和混合場景 3 定義監控指標,如測試效能指標...

RUP各階段簡述

用況驅動旨在為到最終產品為止的每個階段都可以回溯到使用者的真正需求。以體系結構為中心是指關注體系結構模式的開發,以引導後續系統,保證系統的平滑演進。每一次迭代包括迭代計畫 迭代評價和一些具體活動。關於核心工作流中的五個活動 需求 分析 設計 實現和測試較好理解,這裡不再贅述。下面對 rup的四個階段...

EFI BIOS各階段介紹

sec是power on 後執行的第乙個部分,要求cpu應事先知道一些平台配置資訊和hw支援特性 產生臨時memory,可以是 processor cache,static ram 或其他在系統早期就可以訪問的system memory。除此還要知道 早期的memory 可以 map 到 boot ...