Hadoop框架是如今最主流的的框架之一,愈來愈多的人去學習,那麼你對hadoop的理解是什麼?hadoop必定要會優化,那怎麼優化呢,小猿圈今天說一下,感興趣的朋友能夠看看小猿圈寫的這篇文章。bash
一、mr程序的效率瓶頸網絡
功能:分佈式離線計算框架
計算機性能:CPU、內存、磁盤、網絡分佈式
I/O操做優化aoop
(1)數據傾斜(代碼優化)性能
(2)map和reduce數設置不合理學習
(3)map運行時間太長,致使reduce等待太久優化
(4)小文件過多(combineTextInputFomrat小文件合併)spa
(5)不可分塊的超大文件(不斷的溢寫)code
(6)多個溢寫小文件須要屢次merge
二、mr優化方法
六個方面考慮:數據輸入、Map階段、Reduce階段、IO傳輸、
數據傾斜、參數調優
1>數據輸入
(1)合併小文件:在執行mr任務前就進行小文件合併
(2)採用CombineTextInputFormat來做爲輸入,解決輸 入端大量小文件的場景
mr並不適合處理大量小文件
2>Map階段
(1)減小溢寫次數(增長內存200M 80%)
<property>
<name>mapreduce.task.io.sort.mb</name>
<value>100</value>
</property>
<property>
<name>mapreduce.map.sort.spill.percent</name>
<value>0.80</value>
</property>
複製代碼
(2)減小合併次數
<property>
<name>mapreduce.task.io.sort.factor</name>
<value>10</value>
</property>
複製代碼
(3)在map以後,不影響業務邏輯狀況下進行combiner
3>Reduce階段
(1)合理設置map與reduce個數
(2)設置map/reduce共存
設置運行必定程度的map運行後 啓動reduce減小等待時間
<property>
<name>mapreduce.job.reduce.slowstart.completedmaps</name>
<value>0.05</value>
</property>
複製代碼
(3)合理設置reduce端的buffer
<property>
<name>mapreduce.reduce.markreset.buffer.percent</name>
<value>0.0</value>
</property>
複製代碼
4>傳輸
(1)進行數據壓縮
(2)使用sequenceFile
5>數據傾斜
(1)進行範圍分區
(2)自定義分區
(3)Combine
(4)能用mapjoin堅定不用reduce join
6>參數調優
設置核心數
map核心數設置:
<property>
<name>mapreduce.map.cpu.vcores</name>
<value>1</value>
</property>
複製代碼
reduce核心數設置:
<property>
<name>mapreduce.reduce.cpu.vcores</name>
<value>1</value>
</property>
複製代碼
設置內存
maptask內存設置:
<property>
<name>mapreduce.map.memory.mb</name>
<value>1024</value>
</property>
複製代碼
reducetask內存設置:
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>1024</value>
</property>
複製代碼
reduce去map端拿數據並行度
<property>
<name>mapreduce.reduce.shuffle.parallelcopies</name>
<value>5</value>
</property>
複製代碼
hadoop優化小猿圈說了幾個優化的方面,你們感受怎麼樣?若是有其餘方面的優化方法,能夠給小猿圈補充,感受還不錯的話,能夠去小猿圈學習其餘方面內容,但願你們會學到更多全面的內容。