您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關MapReduce是怎么執行的,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
Mapreduce是一個分布式運算程序的編程框架,是用戶開發“基于hadoop的數據分析應用”的核心框架;
Mapreduce核心功能是將用戶編寫的業務邏輯代碼和自帶默認組件整合成一個完整的分布式運算程序,并發運行在一個hadoop集群上;
海量數據在單機上處理因為硬件資源限制,無法勝任
而一旦將單機版程序擴展到集群來分布式運行,將極大增加程序的復雜度和開發難度
引入mapreduce框架后,開發人員可以將絕大部分工作集中在業務邏輯的開發上,而將分布式計算中的復雜性交由框架來處理
一個完整的mapreduce程序在分布式運行時有三類實例進程:
MRAppMaster:負責整個程序的過程調度及狀態協調
mapTask:負責map階段的整個數據處理流程
ReduceTask:負責reduce階段的整個數據處理流程
思想:分而治之,先分后合
其中,maptask的數量是不能設置的,reducetask可以自己設置job.setNumReduceTasks(5);
1.一個mr程序啟動的時候,最先啟動的是MRAppMaster,MRAppMaster啟動后根據本次job的描述信息,計算出需要的maptask實例數量,然后向集群申請機器啟動相應數量的maptask進程
2.maptask進程啟動之后,根據給定的數據切片范圍進行數據處理,主體流程為:
利用客戶指定的inputformat來獲取RecordReader讀取數據,形成輸入KV對
將輸入KV對傳遞給客戶定義的map()方法,做邏輯運算,并將map()方法輸出的KV對收集到緩存
將緩存中的KV對按照K分區排序后不斷溢寫到磁盤文件
3.MRAppMaster監控到所有maptask進程任務完成之后,會根據客戶指定的參數啟動相應數量的reducetask進程,并告知reducetask進程要處理的數據范圍(數據分區)
4.Reducetask進程啟動之后,根據MRAppMaster告知的待處理數據所在位置,從若干臺maptask運行所在機器上獲取到若干個maptask輸出結果文件,并在本地進行重新歸并排序,然后按照相同key的KV為一個組,調用客戶定義的reduce()方法進行邏輯運算,并收集運算輸出的結果KV,然后調用客戶指定的outputformat將結果數據輸出到外部存儲
mapreduce中,map階段處理的數據如何傳遞reduce階段,是mapreduce框架中最關鍵的一個流程,這個流程就叫shuffle;
shuffle: 洗牌、發牌——(核心機制:數據分區,排序,緩存);
具體來說:就是將maptask輸出的處理結果數據,分發給reducetask,并在分發的過程中,對數據按key進行了分區和排序;
shuffle是MR處理流程中的一個過程,它的每一個處理步驟是分散在各個map task和reduce task節點上完成的,整體來看,分為3個操作:
分區partition
Sort根據key排序
Combiner進行局部value的合并
具體來說就是將maptask輸出的處理結果數據,分發給reducetask,并在分發的過程中,對數據按key進行了分區和排序;
maptask收集我們的map()方法輸出的kv對,先進入分區方法,把數據標記好分區,然后把數據發送到內存緩沖區(默認100M)中
當環形緩沖區達到80%時,進行溢寫,從內存緩沖區不斷溢出本地磁盤文件,可能會溢出多個文件 (溢寫前對數據進行快速排序,排序按照key的索引進行字典順序排序)
多個溢出文件會被合并成大的溢出文件(歸并排序算法),對溢寫的文件也可以進行combiner操作,前提是匯總操作,求平均值不行。
在溢出過程中,及合并的過程中,都要調用partitoner進行分組和針對key進行排序
reducetask根據自己的分區號,去各個maptask機器上取相應的結果分區數據,拉取的數據先存儲在內存中,內存不夠了,再存儲到磁盤。
reducetask會取到同一個分區的來自不同maptask的結果文件,reducetask會將這些文件再進行合并(歸并排序)
合并成大文件后,shuffle的過程也就結束了,后面進入reducetask的邏輯運算過程(從文件中取出一個一個的鍵值對group,調用用戶自定義的reduce()方法)
Shuffle中的緩沖區大小會影響到mapreduce程序的執行效率,原則上說,緩沖區越大,磁盤io的次數越少,執行速度就越快
緩沖區的大小可以通過參數調整, 參數:io.sort.mb 默認100M
上述就是小編為大家分享的MapReduce是怎么執行的了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。