亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MapReduce是怎么執行的

發布時間:2022-01-18 15:55:43 來源:億速云 閱讀:123 作者:柒染 欄目:大數據

這期內容當中小編將會給大家帶來有關MapReduce是怎么執行的,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

1mr原理


       Mapreduce是一個分布式運算程序的編程框架,是用戶開發“基于hadoop的數據分析應用”的核心框架;

       Mapreduce核心功能是將用戶編寫的業務邏輯代碼和自帶默認組件整合成一個完整的分布式運算程序,并發運行在一個hadoop集群上;

為什么要用mapreduce


  • 海量數據在單機上處理因為硬件資源限制,無法勝任

  • 而一旦將單機版程序擴展到集群來分布式運行,將極大增加程序的復雜度和開發難度

  • 引入mapreduce框架后,開發人員可以將絕大部分工作集中在業務邏輯的開發上,而將分布式計算中的復雜性交由框架來處理


3 mapreduce結構及核心運行機制


1結構






一個完整的mapreduce程序在分布式運行時有三類實例進程:

  • MRAppMaster:負責整個程序的過程調度及狀態協調

  • mapTask:負責map階段的整個數據處理流程

  • ReduceTask:負責reduce階段的整個數據處理流程

思想:分而治之,先分后合



2整體流程圖



MapReduce是怎么執行的


      其中,maptask的數量是不能設置的,reducetask可以自己設置job.setNumReduceTasks(5);


3流程解析


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將結果數據輸出到外部存儲


4 shuffle機制


1概述

  1. mapreduce中,map階段處理的數據如何傳遞reduce階段,是mapreduce框架中最關鍵的一個流程,這個流程就叫shuffle;

  2. shuffle: 洗牌、發牌——(核心機制:數據分區,排序,緩存);

  3. 具體來說:就是將maptask輸出的處理結果數據,分發給reducetask,并在分發的過程中,對數據按key進行了分區和排序


2主要流程






MapReduce是怎么執行的

shuffle是MR處理流程中的一個過程,它的每一個處理步驟是分散在各個map task和reduce task節點上完成的,整體來看,分為3個操作:

  • 分區partition

  • Sort根據key排序

  • Combiner進行局部value的合并


具體來說就是將maptask輸出的處理結果數據,分發給reducetask,并在分發的過程中,對數據按key進行了分區和排序;




3詳細流程



MapReduce是怎么執行的

  1. maptask收集我們的map()方法輸出的kv對,先進入分區方法,把數據標記好分區,然后把數據發送到內存緩沖區(默認100M)中

  2. 當環形緩沖區達到80%時,進行溢寫,從內存緩沖區不斷溢出本地磁盤文件,可能會溢出多個文件 (溢寫前對數據進行快速排序,排序按照key的索引進行字典順序排序)

  3. 多個溢出文件會被合并成大的溢出文件(歸并排序算法),對溢寫的文件也可以進行combiner操作,前提是匯總操作,求平均值不行。

  4. 在溢出過程中,及合并的過程中,都要調用partitoner進行分組和針對key進行排序

  5. reducetask根據自己的分區號,去各個maptask機器上取相應的結果分區數據,拉取的數據先存儲在內存中,內存不夠了,再存儲到磁盤。

  6. reducetask會取到同一個分區的來自不同maptask的結果文件,reducetask會將這些文件再進行合并(歸并排序)

  7. 合并成大文件后,shuffle的過程也就結束了,后面進入reducetask的邏輯運算過程(從文件中取出一個一個的鍵值對group,調用用戶自定義的reduce()方法)

Shuffle中的緩沖區大小會影響到mapreduce程序的執行效率,原則上說,緩沖區越大,磁盤io的次數越少,執行速度就越快

緩沖區的大小可以通過參數調整,  參數:io.sort.mb  默認100M

上述就是小編為大家分享的MapReduce是怎么執行的了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

延安市| 黄石市| 乌兰察布市| 杭锦旗| 东兰县| 个旧市| 会宁县| 玉屏| 广安市| 恩施市| 贵溪市| 伊宁市| 天峻县| 广丰县| 景东| 沾化县| 延庆县| 固始县| 津南区| 郧西县| 潼关县| 北京市| 尚志市| 龙海市| 临邑县| 昌乐县| 宣汉县| 十堰市| 奉化市| 承德县| 工布江达县| 介休市| 延边| 湟中县| 湘乡市| 南召县| 邳州市| 鄯善县| 凤凰县| 西青区| 高州市|