MapReduce優化方法

2021-10-09 20:50:02 字數 4290 閱讀 9947

mapreduce 程式效率取決於以下幾點:

1.計算機效能

cpu、記憶體、磁碟健康、網路

2.i/o 操作優化

(1)資料傾斜

(2)map 和 reduce 數設定不合理

(3)map 執行時間太長,導致 reduce 等待過久

(4)小檔案過多

(5)大量的不可分塊的超大檔案

(6)spill 次數過多

(7)merge 次數過多等。

1.資料輸入:

合併小檔案:在執行 mr 任務前將小檔案進行合併,大量的小檔案會產生大量的 map 任務,增大 map 任務裝載次數,而任務的裝載

比較耗時,從而導致mr 執行較慢

2.map階段:

(1)減少溢寫(spill)次數:通過調整 io.sort.mb 及 sort.spill.percent引數值,增大觸發 spill 的記憶體上限,減少 spill 次數,從而減少磁碟 io。

(2)減少合併(merge)次數:通過調整 io.sort.factor 引數,增大 merge 的檔案數目,減少 merge 的次數,從而縮短 mr 處理時間。

(3)在 map 之後,不影響業務邏輯前提下,先進行 combine 處理,減少 i/o。

3.reduce階段:

(1)合理設定 map 和 reduce 數:兩個都不能設定太少,也不能設定太多。太少,會導致 task 等待,延長處理時間;太多,會導致 map、reduce 任務間競爭資源,造成處理超時等錯誤

(2)設定 map、reduce 共存:調整 slowstart.completedmaps 引數,使 map 執行到一定程度後,reduce 也開始執行,減少 reduce 的等待時間。

(3)使用 reduce:因為 reduce 在用於蒐集資料集的時候將會產生大量的網路消耗。

(4)合理設定 reduce 端的 buffer:預設情況下,資料達到乙個閾值的時候,buffer中的資料就會寫入磁碟,然後 reduce 會從磁碟中獲得所有的資料。也就是說,buffer 和 reduce 是沒有直接關聯的,中間多個乙個寫磁碟->讀磁碟的過程,既然有這個弊端,那麼就可以通過引數置使得 buffer 中的一部分資料可以直接輸送到 reduce,從而減少 io 開銷:mapred.job.reduce.input.buffer.percent,預設為 0.0。當值大於 0 時候,會保留指定比例的記憶體讀 buffer 中的資料直接拿給reduce 使用。這樣一來,設定 buffer 需要記憶體,讀取資料需要記憶體,reduce 計算

也要記憶體,所以要根據作業的運**況進行調整。

4.資料傾斜問題

(1)資料傾斜現象

資料頻率傾斜——某乙個區域的資料量要遠遠大於其他區域。

資料大小傾斜——部分記錄的大小遠遠大於平均值。

(2)如何收集傾斜資料

在 reduce 方法中加入記錄 map 輸出鍵的詳細情況的功能。

public

static

final string max_values =

"skew.maxvalues"

;private

int maxvaluethreshold;

@override

public

void

configure

(jobconf job)

@override

public

void

reduce

(text key, iterator

values,

outputcollector

output,

reporter reporter)

throws ioexception if(

++i > maxvaluethreshold)

}

(3)減少資料傾斜的方法

①抽樣和範圍分割槽

可以通過對原始資料進行抽樣得到的結果集來預設分割槽邊界值。

②自定義分割槽

基於輸出鍵的背景知識進行自定義分割槽。例如,如果 map 輸出鍵的單詞**於一本書。且其中某幾個專業詞彙較多。那麼就可以自定義分割槽將這這些專業詞彙傳送給固定的一部分reduce 例項。而將其他的都傳送給剩餘的 reduce 例項。

③combine

使用 combine 可以大量地減小資料傾斜。在可能的情況下,combine 的目的就是提前聚合並精簡資料。

④採用 map join,盡量避免 reduce join。

1.資源相關引數:

(1)以下引數是在使用者自己的 mr 應用程式中配置就可以生效(mapred-default.xml)。

①mapreduce.map.memory.mb

乙個 map task 可使用的資源上限(單位:mb),預設為 1024。如果 map task實際使用的資源量超過該值,則會被強制殺死。

②mapreduce.reduce.memory.mb

乙個 reduce task 可使用的資源上限(單位:mb),預設為 1024。如果reduce task實際使用的資源量超過該值,則會被強制殺死。

③mapreduce.map.cpu.vcores

每個 map task 可使用的最多 cpu core數目,預設值: 1

④mapreduce.reduce.cpu.vcores

每個 reduce task 可使用的最多 cpu core 數目,預設值: 1

⑤mapreduce.reduce.shuffle.parallelcopies

每個 reduce 去 map 中拿資料的並行數。預設值是 5

⑥mapreduce.reduce.shuffle.merge.percent

buffer 中的資料達到多少比例開始寫入磁碟。預設值 0.66

⑦mapreduce.reduce.shuffle.input.buffer.percent

buffer 大小佔 reduce 可用記憶體的比例。預設值 0.7

⑧mapreduce.reduce.input.buffer.percent

指定多少比例的記憶體用來存放 buffer中的資料,預設值是 0.0

(2)應該在 yarn 啟動之前就配置在伺服器的配置檔案中才能生效(yarn-default.xml)。

①yarn.scheduler.minimum-allocation-mb 1024

給應用程式 container 分配的最小記憶體

②yarn.scheduler.maximum-allocation-mb 8192

給應用程式 container 分配的最大記憶體

③yarn.scheduler.minimum-allocation-vcores 1

每個 container 申請的最小 cpu 核 數

④yarn.scheduler.maximum-allocation-vcores 32

每個 container 申請的最大 cpu 核 數

⑤yarn.nodemanager.resource.memory-mb 8192

給 containers 分配的最大物理記憶體

(3)shuffle 效能優化的關鍵引數,應在 yarn 啟動之前就配置好(mapred-default.xml)。

①mapreduce.task.io.sort.mb 100

shuffle 的環形緩衝區大小,預設100m

②mapreduce.map.sort.spill.percent 0.8

環形緩衝區溢位的閾值,預設80%

2.容錯相關引數配置(mapreduce效能優化)

(1)mapreduce.map.maxattempts

每個 map task 最大重試次數,一旦重試引數超過該值,則認為 map task 執行失敗,預設值:4。

(2)mapreduce.reduce.maxattempts

每個 reduce task 最大重試次數,一旦重試引數超過該值,則認為 map task 執行失敗,預設值:4。

(3)mapreduce.task.timeout

task 超時時間,經常需要設定的乙個引數,該引數表達的意思為:如果乙個 task 在一定時間內沒

有任何進入,即不會讀取新的資料,也沒有輸出資料,則認為該 task 處於 block 狀態,可能是卡

住了,也許永遠會卡主,為了防止因為使用者程式永遠 block 住不退出,則強制設定了乙個該超時

時間(單位毫秒),預設是 600000。

MapReduce的優化方法

從以下6個方面著手考慮 map端資料輸入時主要需要考慮的是小檔案 因為hadoop預設的切片原則是按檔案進行的 的問題 針對小檔案的問題我們有如下兩種解決方案 1 合併小檔案 在map讀取資料任務開始前,可以人工的對小檔案進行乙個合併,合併成乙個大檔案。2 採用combinetextinputfor...

大資料優化方案 MapReduce優化方法

無意中發現了乙個巨牛的人工智慧教程,忍不住分享一下給大家。教程不僅是零基礎,通俗易懂,而且非常風趣幽默,像看 一樣!覺得太牛了,所以分享給大家。點這裡可以跳轉到教程。大資料面試寶典目錄,一 mapreduce 程式效率的瓶頸在於兩點 1 計算機效能 cpu 記憶體 磁碟健康 網路 2 i o 操作優...

mapreduce優化方案

1.任務排程 任務排程是hadoop中重要的環節 1.計算方面,hadoop會將任務分配給空閒機器,使所有的任務能公平地分享系統資源。2.i o資料流方面,會盡量將map任務分配給inputsplit所在的機器,減少i o操作。2.資料預處理與inputsplit的大小 1.mapredue適合處理...