前言:
mapreduce程式的效率的瓶頸在於兩點:
計算機效能:cpu、記憶體、磁碟健康、網路
i/o操作:
資料傾斜
map和reduce數量設定不合理
map的執行時間太長,導致reduc的等待過久
小檔案過多
大量的補課分塊的超大檔案
spill(溢寫)次數過多
merge(合併)次數過多
mapreduce優化方法
資料輸入:
(1)合併小檔案:在執行任務前將小檔案進行合併
(2)採用combinetextinputformat來作為輸入,解決輸入端大量小檔案的場景。將多個小檔案從邏輯上規劃到乙個切片中,這樣,多個小檔案就可以交給乙個 maptask。
combinetextinputformat.setmaxinputsplitsize(job, 4194304);// 4m
combinetextinputformat.setmininputsplitsize(job, 2097152);// 2m
job.setinputformatclass(combinetextinputformat.class)
map階段:
(1)減少溢寫(spill)操作:通過調整 io.sort.mb 及 sort.spill.percent 引數值,增大觸發spill 的記憶體上限,減少 spill 次數,從而減少磁碟 io。
(2)減少合併(merge)操作:通過調整 io.sort.factor 引數,增大 merge 的檔案數目,減少 merge 的次數,從而縮短 mr 處理時間。
(3)在不影響業務邏輯的前提下,先進行combine處理,減少i/o。
reduce階段:
(1)合理設定map和reduce的數量
(2)設定map、reduce共存:調整 slowstart.completedmaps 引數,使 map 執行到一定程度後,reduce 也開始執行,減少reduce 的等待時間。
(3)規避使用reduce
(4)合理使用reduce端的buffer
i/o傳輸:
(1)採用資料壓縮的方法,減少網路io時間
(2)使用sequencefile二進位制檔案
資料傾斜問題:
(1)抽樣和範圍分割槽
(2)自定義分割槽
(3)combine
(4)採用map join,盡量避免reduce join
jvm重用:
對於大量的小檔案job,開啟jvm重用會減少45%執行時間。
具體設定:mapreduce.job.jvm.numtasks 值在 10-20 之間。
Hadoop 企業優化
mapreduce優化方法主要從六個方面考慮 資料輸入 map階段 reduce階段 io傳輸 資料傾斜問題和常用的調優引數。2.6.1 資源相關引數 以下引數是在使用者自己的mr應用程式中配置就可以生效 mapred default.xml 配置引數 引數說明 mapreduce.map.memo...
Hadoop 六 Hadoop企業優化
mapreduce 程式效率的瓶頸在於兩點 cpu 記憶體 磁碟健康 網路 1 資料傾斜 2 map和reduce數設定不合理 3 map執行時間太長,導致reduce等待過久 4 小檔案過多 5 大量的不可分塊的超大檔案 6 spill次數過多 7 merge次數過多等。mapreduce優化方法...
12)Hadoop企業優化
mapreduce 跑的慢的原因 mapreduce效率的瓶頸主要有兩點 mapreduce優化方法 mapreduce優化方法主要從六個方面考慮 資料輸入 map階段 reduce階段 io傳輸 資料傾斜問題和常用的調優引數 map階段 reduce階段 io傳輸 使用sequencefile二進...