首頁技術(shù)文章正文

大數(shù)據(jù)離線階段Day8之MapReduce優(yōu)化參數(shù)

更新時(shí)間:2018-10-24 來源:黑馬程序員 瀏覽量:

  1. 資源相關(guān)參數(shù)

  //以下參數(shù)是在用戶自己的MapReduce應(yīng)用程序中配置就可以生效

  (1) mapreduce.map.memory.mb: 一個(gè)Map Task可使用的內(nèi)存上限(單位:MB),默認(rèn)為1024。如果Map Task實(shí)際使用的資源量超過該值,則會(huì)被強(qiáng)制殺死。

  (2) mapreduce.reduce.memory.mb: 一個(gè)Reduce Task可使用的資源上限(單位:MB),默認(rèn)為1024。如果Reduce Task實(shí)際使用的資源量超過該值,則會(huì)被強(qiáng)制殺死。

  (3) mapreduce.map.cpu.vcores: 每個(gè)Maptask可用的最多cpu core數(shù)目, 默認(rèn)值: 1

  (4) mapreduce.reduce.cpu.vcores: 每個(gè)Reducetask可用最多cpu core數(shù)目默認(rèn)值: 1

  (5) mapreduce.map.java.opts: Map Task的JVM參數(shù),你可以在此配置默認(rèn)的java heap

  size等參數(shù), 例如:“-Xmx1024m -verbose:gc -Xloggc:/tmp/@taskid@.gc”

  (@taskid@會(huì)被Hadoop框架自動(dòng)換為相應(yīng)的taskid), 默認(rèn)值: “”

  (6) mapreduce.reduce.java.opts: Reduce Task的JVM參數(shù),你可以在此配置默認(rèn)的java

  heap size等參數(shù), 例如:“-Xmx1024m -verbose:gc -Xloggc:/tmp/@taskid@.gc”, 默認(rèn)值: “”

  //應(yīng)該在yarn啟動(dòng)之前就配置在服務(wù)器的配置文件中才能生效

  (1) yarn.scheduler.minimum-allocation-mb RM中每個(gè)容器請求的最小配置,以MB為單位,默認(rèn)1024。

  (2) yarn.scheduler.maximum-allocation-mb RM中每個(gè)容器請求的最大分配,以MB為單位,默認(rèn)8192。

  (3) yarn.scheduler.minimum-allocation-vcores 1

  (4)yarn.scheduler.maximum-allocation-vcores 32

  (5) yarn.nodemanager.resource.memory-mb 表示該節(jié)點(diǎn)上YARN可使用的物理內(nèi)存總量,默認(rèn)是8192(MB),注意,如果你的節(jié)點(diǎn)內(nèi)存資源不夠8GB,則需要調(diào)減小這個(gè)值,而YARN不會(huì)智能的探測節(jié)點(diǎn)的物理內(nèi)存總量。

  //shuffle性能優(yōu)化的關(guān)鍵參數(shù),應(yīng)在yarn啟動(dòng)之前就配置好

  (1) mapreduce.task.io.sort.mb 100 shuffle的環(huán)形緩沖區(qū)大小,默認(rèn)100m

  (2) mapreduce.map.sort.spill.percent 0.8 環(huán)形緩沖區(qū)溢出的閾值,默認(rèn)80%

  2. 容錯(cuò)相關(guān)參數(shù)

  (1) mapreduce.map.maxattempts: 每個(gè)Map Task最大重試次數(shù),一旦重試參數(shù)超過該值,則認(rèn)為Map Task運(yùn)行失敗,默認(rèn)值:4。

  (2) mapreduce.reduce.maxattempts: 每個(gè)Reduce Task最大重試次數(shù),一旦重試參數(shù)超過該值,則認(rèn)為Map Task運(yùn)行失敗,默認(rèn)值:4。

  (3) mapreduce.map.failures.maxpercent: 當(dāng)失敗的Map Task失敗比例超過該值,整個(gè)作業(yè)則失敗,默認(rèn)值為0. 如果你的應(yīng)用程序允許丟棄部分輸入數(shù)據(jù),則該該值設(shè)為一個(gè)大于0的值,比如5,表示如果有低于5%的Map Task失敗(如果一個(gè)Map Task重試次數(shù)超過mapreduce.map.maxattempts,則認(rèn)為這個(gè)Map Task失敗,其對應(yīng)的輸入數(shù)據(jù)將不會(huì)產(chǎn)生任何結(jié)果),整個(gè)作業(yè)扔認(rèn)為成功。

  (4) mapreduce.reduce.failures.maxpercent: 當(dāng)失敗的Reduce Task失敗比例超過該值為,整個(gè)作業(yè)則失敗,默認(rèn)值為0.

  (5) mapreduce.task.timeout:如果一個(gè)task在一定時(shí)間內(nèi)沒有任何進(jìn)入,即不會(huì)讀取新的數(shù)據(jù),也沒有輸出數(shù)據(jù),則認(rèn)為該task處于block狀態(tài),可能是臨時(shí)卡住,也許永遠(yuǎn)會(huì)卡住。為了防止因?yàn)橛脩舫绦蛴肋h(yuǎn)block不退出,則強(qiáng)制設(shè)置了一個(gè)超時(shí)時(shí)間(單位毫秒),默認(rèn)是600000,值為0將禁用超時(shí)。。

  3. 效率跟穩(wěn)定性參數(shù)

  (1) mapreduce.map.speculative: 是否為Map Task打開推測執(zhí)行機(jī)制,默認(rèn)為true, 如果為true,則可以并行執(zhí)行一些Map任務(wù)的多個(gè)實(shí)例。

  (2) mapreduce.reduce.speculative: 是否為Reduce Task打開推測執(zhí)行機(jī)制,默認(rèn)為true

  (3)mapreduce.input.fileinputformat.split.minsize: FileInputFormat做切片時(shí)最小切片大小,默認(rèn)1。

  (5)mapreduce.input.fileinputformat.split.maxsize: FileInputFormat做切片時(shí)最大切片大小

  推測執(zhí)行機(jī)制(Speculative Execution):它根據(jù)一定的法則推測出“拖后腿”的任務(wù),并為這樣的任務(wù)啟動(dòng)一個(gè)備份任務(wù),讓該任務(wù)與原始任務(wù)同時(shí)處理同一份數(shù)據(jù),并最終選用最先成功運(yùn)行完成任務(wù)的計(jì)算結(jié)果作為最終結(jié)果。



作者 :黑馬程序員大數(shù)據(jù)培訓(xùn)學(xué)院
首發(fā):http://cloud.itheima.com

分享到:
在線咨詢 我要報(bào)名
和我們在線交談!