MR1和MR2的工作原理

2021-09-21 05:32:37 字數 1754 閱讀 5202

1)、客戶端向jobtracker請求乙個新的作業id(通過jobtracker的getnewjobid()方法獲取,見第2步

2)、計算作業的輸入分片,將執行作業所需要的資源(包括jar檔案、配置檔案和計算得到的輸入分片)複製到乙個以id命名的jobtracker的檔案系統中(hdfs),見第3步

3)、告知jobtracker作業準備執行,見第4步

4)、jobtracker收到對其submitjob()方法的呼叫後,會把此呼叫放入乙個內部佇列中,交由作業排程器進行排程,並對其初始化,見第5步

5)、作業排程器首先從共享檔案系統hdfs中獲取客戶端已經計算好的輸入分片,見第6步

6)、為每個分片建立乙個map任務和reduce任務,以及作業建立和作業清理的任務。

7)、tasktracker定期向jobtracker傳送「心跳」,表明自己還活著。見第7步

8)、jobtracker為tasktracker分配任務,對於map任務,jobtracker會考慮tasktracker的網路位置,選取乙個距離其輸入分片檔案最近的tasktracker,對於reduce任務,jobtracker會從reduce任務列表中選取下乙個來執行。

9)、從hdfs中把作業的jar檔案複製到tasktracker所在的檔案系統,實現jar檔案本地化,同時,tasktracker將應用程式所需的全部檔案從分布式快取中複製到本地磁碟,見第8步,並且tasktracker為任務新建乙個本地工作目錄,並把jar檔案的內容解壓到這個資料夾下,然後新建乙個taskrunner例項執行該任務

10)、taskrunner啟動乙個新的jvm(見第9步)來執行每個任務(見第10步)

11)、任務執行期間,對其進度progress保持追蹤。對map進度是已經處理輸入所佔的比例。對於reduce任務,分三部分,與shuffle的三個階段相對應。

shuffle是系統執行排序的過程。是mapreduce的心臟。

對於map端而言:每個map任務都有乙個環形記憶體緩衝區,預設是0.8,當緩衝區達到閾值時便開始把內容溢位spill到磁碟,在寫入磁碟之前,執行緒會根據資料最終要傳的reducer把資料劃分成相應的分割槽,每個分割槽中,按鍵值進行內排序,如果有combine(使結果更緊湊),會在combine完成之後再寫入磁碟。

對於reducer端而言,map的輸出檔案位於tasktracker的本地磁碟,每個map任務完成的時間可能不同,只要有乙個完成,就會複製其輸出(這就是複製階段),然後把map的輸出進行merge合併,然後直接把資料輸入到reduce函式,完成輸出。

2)、計算作業的輸入分片,將執行作業所需要的資源(包括jar檔案、配置檔案和計算得到的輸入分片)複製到乙個(hdfs),見第3步

5)、並與對應的nodemanager通訊見第5a步

hadoop原始碼研究 M R 1

inputformat 將輸入的資料集切割成小資料集 inputsplits,此外 inputformat 中還提供乙個 recordreader 的實現,將乙個 inputsplit 解析成 對提供給 map 函式。預設 textinputformat 針對文字檔案,按行將文字檔案切割成 inpu...

Spark和MR的區別

spark把運算的中間資料存放在記憶體,迭代計算效率更高 mr的中間結果需要落地,需要儲存到磁碟,這樣必然會有磁碟io操作,影響效能 spark容錯性高,它通過彈性分布式資料集rdd來實現高效容錯,rdd是一組分布式的儲存在節點記憶體中的唯讀性質的資料集,這些集合石彈性的,某一部分丟失或者出錯,可以...

MR21 MR22和CK24的區別

mr21和ck24都是用於修改物料標準價,但兩者功能和用法上有所區別 mr21是直接更改單價,ck24是在ck11n或ck40n 評估的基礎上的 核發,ck24記錄 評估,評估在做co pa時需要用到。因此,ck24一般是和ck11n合用,利用ck11n計算儲存,然後ck24標記和發布。mr21和m...