hadoop map reduce 階段筆記

2021-08-09 10:24:35 字數 1062 閱讀 6813

shuffle and sort

mr 框架保證:每個 reducer 的輸入都是按照 key 鍵排過序的。

shuffle:將map輸出結果送到reducer和排序的功能。

1) map:每個map task將結果輸出到環形記憶體緩衝區,當到達一定閾值,則啟動乙個後台程序將快取中的資料 1: 按照 reduce 階段 reducer 的個數將資料分割槽,然後在每個分割槽裡面的資料按照key鍵值排序,下一步,如果設定了 combiner 函式,則將這個combiner函式作用於上一步的結果,然後就是把資料儲存到磁碟。

注意:當這個後台程序將記憶體中的資料寫入磁碟的時候,如果快取已經滿了,那麼task會阻塞,直到spill階段完成。

記憶體快取預設是 100m,每當到達閾值則生成乙個spill檔案,task完成了以後,將多個spill檔案合併成乙個檔案。這個檔案是分割槽的,而且每個分割槽中的資料都是按key值排好序的。

可以讓資料壓縮

map 的資料是通過 http 傳輸給 reducer 的。

2)reduce:reducer 要執行任務,則第一步就需要獲得 map 階段輸出到磁碟的資料。這個階段叫做 copy phase。每個 reducer 預設有5個用於從遠端機器獲取資料的執行緒,並行執行。

copy phase:

1 如果 map 輸出結果資料量比較小,則直接放在記憶體中,否則放到磁碟中。

2 當記憶體中的資料到達一定閾值,則將資料合併然後spill 到磁碟。(如果配置了 combiner , 那麼儲存到磁碟之前進行 combine)

3 copy 階段繼續執行,會開啟乙個後台程序將多個小檔案合併並排序生成乙個大檔案。

4 當 map task 有乙個完成了則開始 copy phase 

sorted phase:

當map階段

檔案都已經copy到reducer段然後執行 sorted phase(merge phase)。

1 將各個 map 輸出的檔案合併。

reduce phase:

將 sorted 階段的結果作為 reduce 函式的輸入,輸出結果,如果是hdfs檔案,那麼第乙個block將儲存在本地節點的機器上

Hadoop MapReduce 效能優化

我們時常談論說到mapreduce時,我們都會說它是離線計算框架,磁碟io開銷大,job執行比較慢等等。這一篇部落格,南國系統回顧下mr程式執行慢的原因,以及如何優化mr程式。我們都知道mapreduce是離線計算框架,不同於spark記憶體計算框架模型。乙個標準的mr程式由map方法和reduce...

九 hadoop mapreduce分割槽

一 什麼時候分割槽?1 分割槽的實現 通過繼承partitioner類,實現getpartition方法。public int getpartition key key,value value,int reducetasknumber map結束後得到的每個key value都呼叫該方法,並把key...

Hadoop Mapreduce執行流程

整個 hadoop mapreduce 的作業執行流程如圖所示 客戶端向 jobtracker 提交作業。首先,使用者需要將所有應該配置的引數根據需求配置好。作業提交之後,就會進入自動化執行。在這個過程中,使用者只能監控程式的執 況和強制中斷作業,但是不能對作業的執行過程進行任何干預。提交作業的基本...