您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“MapReduce的工作機(jī)制是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“MapReduce的工作機(jī)制是什么”吧!
靜態(tài)圖:
動(dòng)態(tài)圖:
進(jìn)度和狀態(tài)的更新
map任務(wù)或reduce 任務(wù)中的用戶代碼拋出運(yùn)行異常
JVM突然退出
節(jié)點(diǎn)管理器運(yùn)行失敗
資源管理器運(yùn)行失敗
獲得高可用性,HA, 在雙機(jī)熱備模式下,運(yùn)行一對(duì)資源管理器是必要的
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)
推測執(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í)!
免責(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)容。