MapReduce是分布式計算的鼻祖,雖然我們已經不需要再寫MR了,但是了解MR的底層邏輯,對解決各種分布式遇到的問題、調優,有極大的幫助。廢話不多說,OK,let's GO!
大數據工程師版
MapReduce流程分為4個步驟:
大數據高級工程師版
MapReduce流程分為7個步驟:
架構師版
MapReduce一共有7個角色參與,分為4個大階段,7個小階段。分别是:
1、任務啟動階段
1.1、由Client端發起請求;
1.2、YarnRunner接受請求并申請資源;
1.3、ResourceManager檢索資源情況,分配資源路徑給YarnRunner;
1.4、YarnRunner進行分片,申請啟動MRAppMaster
1.5、ResourceManager根據分片和job等信息,選擇數據所在節點啟動MapTask(程序找數據),喚醒MRAppMaster
1.6、MRAppMaster啟動,持續監控和管理任務
1.7、MapTask啟動,開始幹活
2、Map階段
2.1數據讀取,每個task讀取自己節點上的數據。
2.2數據處理
2.2.1每個task對自己讀取到的數據進行split,分成更小的數據塊
2.2.2對每個split的數據進行map,提取key、value、con
2.2.3對數據進行分區,有條件建議自定義分區,可以解決數據傾斜的問題,對之後的reduce也有極大的優化
2.2.4數據進入環形緩沖區,以起始點為赤道,到達溢出比後,刷新赤道
2.2.5溢出的數據刷入sort進行排序
2.2.6排序好的數據放入spill,進行merge後有序寫入hdfs
2.3shuffle階段:廣義shuffle階段從map之後就開始,到調用reduce函數結束。這裡隻是将hdfs的數據刷入reduce的緩存區域。
3、reduce階段:
3.1Reduce啟動
3.1.1MRAppMaster監控到redeuce任務即将結束,開始申請啟動ReduceTask;RM接受申請,根據分區結果,啟動若幹ReduceTask
3.1.2ReduceTask啟動,把每個map結果中的不同分區的數據,shuffle數據到對應Reducetask所在節點的緩存
3.2數據處理
3.2.1在緩存中對每個sort進行merge(内存、緩存都有)
3.2.2将merge後的結果,重新進行spill,排序後,落到hdfs
3.2.3将所有小文件merge成一個大文件
3.4、Reduce階段
3.4.1調用Reduce函數,對排序好的file進行彙總
3.4.2将最終結果寫入到hdfs中
4任務結束階段
4.1MRAppMaster監控到每個Reduce節點的執行情況
4.2向上彙報,并申請注銷自己
4.3RM注銷MRAppMaster,并向上彙報
4.4YarnRunner返回任務執行完成信息
4.5客戶端接受信息,任務結束
作者:彭文華 大數據架構師 分享數據分析、大數據技術、數倉建設相關的技術、方法論、案例、解決方案。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!