溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

MapReduce的工作機(jī)制是什么

發(fā)布時(shí)間:2021-06-22 17:47:53 來源:億速云 閱讀:164 作者:chen 欄目:大數(shù)據(jù)

本篇內(nèi)容主要講解“MapReduce的工作機(jī)制是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“MapReduce的工作機(jī)制是什么”吧!

剖析MapReduce 作業(yè)運(yùn)行機(jī)制

靜態(tài)圖:

MapReduce的工作機(jī)制是什么

動(dòng)態(tài)圖:

MapReduce的工作機(jī)制是什么

進(jìn)度和狀態(tài)的更新

MapReduce的工作機(jī)制是什么

失敗

  • map任務(wù)或reduce 任務(wù)中的用戶代碼拋出運(yùn)行異常

  • JVM突然退出

  • 節(jié)點(diǎn)管理器運(yùn)行失敗

  • 資源管理器運(yùn)行失敗

    • 獲得高可用性,HA, 在雙機(jī)熱備模式下,運(yùn)行一對(duì)資源管理器是必要的

shuffle 和排序

  • MapReduce 確保每個(gè)reducer 的輸入都是按鍵排序的。系統(tǒng)執(zhí)行排序、將map輸出作為輸入傳給reducer的過程稱為shuffle.

  • map 端

    map 函數(shù)開始產(chǎn)生輸出時(shí),并不是簡單地將它寫入到磁盤。這個(gè)過程更為復(fù)雜,它利用緩沖的方式寫到內(nèi)存并出于效率的考慮進(jìn)行預(yù)排序。

    每個(gè)map任務(wù)都有一個(gè)環(huán)形內(nèi)存緩沖區(qū)用于存儲(chǔ)任務(wù)存儲(chǔ)任務(wù)輸出。在默認(rèn)情況下,緩沖區(qū)的大小為100Mb,這個(gè)值可以通過改變mapreduce.task.io.sort.mb性來調(diào)整。一但鍰沖內(nèi)容達(dá)到閾值(mapreduce.map.sort.spill.percent,默認(rèn)為0.80,或80%),一個(gè)后臺(tái)線程便開始把內(nèi)容溢出(spill)到磁盤。在溢出寫到磁盤過程中,map輸出繼續(xù)寫到緩沖區(qū),但如果在此期間緩沖區(qū)被填滿,map會(huì)被阻塞直到寫磁盤過程完成。溢出寫過程按輪詢方式將緩沖區(qū)中的內(nèi)容寫到mapreduce.cluster.local.dir屬性在作業(yè)特定子目錄下指定的目錄中。

    在寫磁盤之前,線程首先根據(jù)數(shù)據(jù)最終要傳的reducer把數(shù)據(jù)劃分成相應(yīng)的分區(qū)(partition)。在每個(gè)分區(qū)中,后臺(tái)線程按鍵進(jìn)行內(nèi)存中排序,如果有一個(gè)combiner函數(shù),它就在排序后的輸出上運(yùn)行。運(yùn)行combiner函數(shù)使得map輸出結(jié)果更緊湊,因此減少寫到磁盤的數(shù)據(jù)和傳遞給reducer的數(shù)據(jù)。

    每次內(nèi)存緩沖區(qū)達(dá)到溢出閾值,就會(huì)新建一個(gè)溢出文件(spill file),因此在map任務(wù)寫完其最后一個(gè)輸出記錄之后,會(huì)有幾個(gè)溢出文件。在任務(wù)完成之前,溢出文件被合并成一個(gè)已分區(qū)且已排序的輸出文件。配置屬性mapreduce.task.io.sort.factor控制著一次最多能合并多少流,默認(rèn)值是10。

    如果至少存在3個(gè)溢出文件(通過mapreduce.map.combine.minspills屬性設(shè)置)時(shí),則combiner就會(huì)在輸出文件寫到磁盤之前再次運(yùn)行。前面曾講過,combiner可以在輸人上反復(fù)運(yùn)行,但并不影響最終結(jié)果。如果只有1或2個(gè)溢出文件,那么由于map輸出規(guī)模減少,因而不值得調(diào)用combiner帶來的開銷,因此不會(huì)為該map輸出再次運(yùn)行combiner。

    在將壓縮map輸出寫到磁盤的過程中對(duì)它進(jìn)行壓縮往往是個(gè)很好的主意,因?yàn)檫@樣會(huì)寫磁盤的速度更快,節(jié)約磁盤空間,并且減少傳給reducer的數(shù)據(jù)量。在默認(rèn)情況下,輸出是不壓縮的,但只要將mapreduce.map.output.compress設(shè)置為true,就可以輕松啟用此功能。使用的壓縮庫由mapreduce.map.output.compress.codec指定。

    reducer通過HTTP得到輸出文件的分區(qū)。用于文件分區(qū)的工作線程的數(shù)量由任務(wù)的mapreduce.shuffle.max.threads屬性控制,此設(shè)置針對(duì)的是每一個(gè)節(jié)點(diǎn)管理器,而不是針對(duì)每個(gè)map任務(wù)。默認(rèn)值0將最大線程數(shù)設(shè)置為機(jī)器中處理器數(shù)量的兩倍。

    • 給shuffle 過程盡量多提供內(nèi)存空間

    • 寫map函數(shù)和reduce 函數(shù)時(shí)盡量少用內(nèi)存,不應(yīng)該無限使用內(nèi)存

    • 在map端,可以通過避免多次溢出寫磁盤來獲得最佳性能

    • 在reduce端,中間數(shù)據(jù)全部駐留在內(nèi)存時(shí),就能獲得最佳性能

    • reduce 端

    • 配置調(diào)優(yōu)

任務(wù)的執(zhí)行

  • 推測執(zhí)行 并行執(zhí)行過程中,對(duì)于拖后腿的任務(wù),Hadoop不會(huì)嘗試診斷或修復(fù)執(zhí)行緩慢的任務(wù),相反,在一個(gè)任務(wù)運(yùn)行比預(yù)期慢的時(shí)候,它會(huì)盡量檢測,并啟動(dòng)另一個(gè)相同的任務(wù)作為備份。這就是所謂的“推測執(zhí)行”

  • OutputCommitters

hadoop MapReduce 使用一個(gè)提交協(xié)議來確保作業(yè)和任務(wù)都完全成功或失敗。這個(gè)行為通過對(duì)作業(yè)使用OutputCommitters 來實(shí)現(xiàn)

到此,相信大家對(duì)“MapReduce的工作機(jī)制是什么”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI